转自九门提督
 
为什么使用Lighttpd,从性能方面来说,首先考虑单进程与多进程问题,这也是我为什么不想使用Apache的原因,多进程服务器的惊群问题,简单来说多进程服务(例如Apache)在一个请求发送时候会唤醒所有sleep的进程,但是最终服务的只有一个,在进程数目很多,请求频繁的时候这会造成一个大困扰,系统会忙于切换进程,如果看Top会发现CPU使用在system的比例很高,至于Lighttpd则使用单进程来响应quest,使用libevent,poll()作为event handler,如果在linux2.4下,还可以选择rtsig作为event handler。如果不使用大文件(>4G)支持,lighttpd使用sendfile()来发送文件,完全的zero-copy,在这方面性能表现是占优的。同时Lighttpd使用FastCGI来做动态脚本处理,经过实测,在性能表现上也可以接受。
另外就是原先使用Apache的用户迁移成本会比较少,Lighttpd语法与Apache接近,并且核心功能基本实现,我关注的就是url_rewrite,PHP(这是当然的),alias,custom_log这几个模块,语法接近,并且也同样支持跟cronolog的管道配合日志,所以迁移之后功能都可以实现。另外我比较了Apache和Lighttpd的Suexec方案,虽然目前Lighttpd并没有官方模块来支持这一特性,但是就实现的难度来看,跟Apache1.3乃至Apache2+MPM差不多……(如果希望安全的使用Apache2+MPM+PHP,一样需要FastCGI模式)
如此,我们就可以开始尝试了,首先是Lighttpd的下载,然后把PHP安装为cgi模式,你可能需要安装Libevent,如果需要url_rewrite支持,还需要pcre,安装基础安装可以看TutorialLighttpdAndPHP
安装PHP
  1. ./configure \
  2. --prefix=/usr/local/php-cgi \
  3. --enable-fastcgi \
  4. --enable-discard-path \
  5. --enable-force-redirect \
  6. &&make \
  7. &&make install

在php.ini里边修改你的设置
  1. cgi.fix_pathinfo = 1

安装Lighttpd
  1. ./configure \
  2. --prefix=/usr/local/lighttpd \
  3. && make \
  4. && make install

设定文件范例 PHP部分

  1. fastcgi.server = ( ".php" =>
  2.    (( "socket" => "/tmp/php-fastcgi.socket",
  3.       "bin-path" => "/usr/local/php-cgi/bin/php",
  4.       "idle-timeout" => 30,
  5.       "min-procs" => 1,
  6.       "max-procs" => 1,
  7.       "bin-environment" => (
  8.         "PHP_FCGI_CHILDREN" => "1",
  9.         "PHP_FCGI_MAX_REQUESTS" => "10000" ),
  10.       "bin-copy-environment" => (
  11.         "PATH", "SHELL", "USER" ),
  12.       "broken-scriptfilename" => "enable"
  13.    ))
  14.  )

一个简单的启动/停止脚本
  1. #!/bin/sh
  2.  
  3. LIGHTTPD_CONFIG=/usr/local/apache04/conf/httpd.conf
  4. LIGHTTPD_BIN=/usr/local/apache04/sbin/lighttpd
  5. LIGHTTPD_PID=/usr/local/apache04/lighttpd.pid
  6. test -r $LIGHTTPD_CONFIG || exit 6
  7.  
  8. case "$1" in
  9.     start )
  10.         echo -n "Starting lighttpd"
  11.         $LIGHTTPD_BIN -f $LIGHTTPD_CONFIG
  12.         ;;
  13.     stop )
  14.         echo -n "Shutting down lighttpd"
  15.         killall lighttpd
  16.         rm $LIGHTTPD_PID
  17.         ;;
  18. esac
  19. exit 0

这样就可以跑起来了:)

0

收藏

sofieh

7篇文章,1W+人气,0粉丝