站长论坛

标题: Lighttpd介绍与安装 [打印本页]

作者: tzlink    时间: 2008-12-1 18:26
标题: Lighttpd介绍与安装
lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的webserver环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的webserver中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。

    为什么使用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确实非常不错,apache主要的问题是密集并发下,不断的fork()和切换,以及较高(相对于 lighttpd而言)的内存占用,使系统的资源几尽枯竭。而lighttpd采用了Multiplex技术,代码经过优化,体积非常小,资源占用很低,而且反应速度相当快。

    利用apache的rewrite技术,将繁重的cgi/fastcgi任务交给lighttpd来完成,充分利用两者的优点,现在那台服务器的负载下降了一个数量级,而且反应速度也提高了一个甚至是2个数量级!

    如此,我们就可以开始尝试了,首先是Lighttpd的下载,然后把PHP安装为cgi模式,你可能需要安装Libevent,如果需要url_rewrite支持,还需要pcre,安装基础安装可以看http://trac.lighttpd.net/trac/wiki/TutorialInstallation

    安装PHP
    ./configure \
    --prefix=/usr/local/php-cgi \
    --enable-fastcgi \
    --enable-discard-path \
    --enable-force-redirect \
    &&make \
    &&make install

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

    安装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

    这样就可以跑起来了:)




欢迎光临 站长论坛 (http://tzlink.com/bbs/) Powered by Discuz! X3.2