为什么使用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
在php.ini里边修改你的设置
安装Lighttpd
设定文件范例 PHP部分
一个简单的启动/停止脚本
这样就可以跑起来了:)
Lighttpd
libevent
PCRE
- ./configure \
- --prefix=/usr/local/php-cgi \
- --enable-fastcgi \
- --enable-discard-path \
- --enable-force-redirect \
- &&make \
- &&make install
- cgi.fix_pathinfo = 1
- ./configure \
- --prefix=/usr/local/lighttpd \
- && make \
- && make install
- fastcgi.server = ( ".php" =>
- (( "socket" => "/tmp/php-fastcgi.socket",
- "bin-path" => "/usr/local/php-cgi/bin/php",
- "idle-timeout" => 30,
- "min-procs" => 1,
- "max-procs" => 1,
- "bin-environment" => (
- "PHP_FCGI_CHILDREN" => "1",
- "PHP_FCGI_MAX_REQUESTS" => "10000" ),
- "bin-copy-environment" => (
- "PATH", "SHELL", "USER" ),
- "broken-scriptfilename" => "enable"
- ))
- )
- #!/bin/sh
- LIGHTTPD_CONFIG=/usr/local/apache04/conf/httpd.conf
- LIGHTTPD_BIN=/usr/local/apache04/sbin/lighttpd
- LIGHTTPD_PID=/usr/local/apache04/lighttpd.pid
- test -r $LIGHTTPD_CONFIG || exit 6
- case "$1" in
- start )
- echo -n "Starting lighttpd"
- $LIGHTTPD_BIN -f $LIGHTTPD_CONFIG
- ;;
- stop )
- echo -n "Shutting down lighttpd"
- killall lighttpd
- rm $LIGHTTPD_PID
- ;;
- esac
- exit 0

回复评论