为什么使用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,安装基础安装可以看。
安装PHP
-
./configure \
-
--prefix=/usr/local/php-cgi \
-
--enable-fastcgi \
-
--enable-discard-path \
-
--enable-force-redirect \
-
&&make \
-
&&make install
在php.ini里边修改你的设置
安装Lighttpd
-
./configure \
-
--prefix=/usr/local/lighttpd \
-
&& make \
-
&& make install
设定文件范例 PHP部分
-
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
这样就可以跑起来了:)