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

LightTPD For Windows安装教程
1.解压到任何目录(最好是英文目录,其他语言的没试过),如d:\inetpub\LightTPD;我的系统环境:Vista32 中文版,PHP5.2.3和5.2.4,mysql 5.0.45;
以下的conf、bat和RunHiddenConsole.exe可以在這裏下載:http://www.box.net/shared/vfvqyjhday
2.打開conf文件夾,將lighttpd-inc.conf備份;
3.修改這個配置文件,我的配置如下(精簡過的)#後面的是注釋,詳細注釋前往官方文檔
代碼:
#定義lighttpd所在目錄
var.root = "D:/Inetpub/Lighttpd"
#啓用的modules(詳細見原版lighttpd-inc.conf)
server.modules = (
"mod_access",
"mod_cgi",
"mod_accesslog",
"mod_alias",
#"mod_fastcgi"
)
#服務的目錄
server.document-root = "D:/Inetpub/www/"
server.errorlog = var.root + "/logs/lighttpd.error.log"
server.upload-dirs = (var.root + "/tmp")
accesslog.filename = var.root + "/logs/access.log"
#默认首頁
index-file.names = ( "index.php", "index.html", "index.htm" )
#使用php
static-file.exclude-extensions = ( ".php" )
#使用CGI php的定义
cgi.assign = ( ".php" => "D:/Inetpub/php/php-cgi.exe")
#使用fastcgi PHP(win版下可使用)
#fastcgi.server = ( ".php" =>( "localhost" =>("host" => "127.0.0.1","port" => 521 )))
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar"
)
#虛擬目錄
alias.url = ( "/ma/" => "D:/Inetpub/ma/" )
#偵聽端口
server.port = 81
mimetype.use-xattr = "enable"
#无首頁是否列文件目录
dir-listing.activate = "enable"
#服務器的版本好(好像是列目錄時顯示的)
server.tag = "lighttpd/1.4.18i-win32"
url.access-deny = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
4.寫運行Lighttpd的批處理文件放在lighttpd的根目錄下:
运行CGI php:
start_lighttpd - cgi.bat
代碼:
@ECHO OFF
ECHO Starting lighttpd...
#重點是這句,-m指定mod文件的位置(一般不需要修改),-f指定配置文件的位置
LightTPD.exe -m lib\ -f conf\lighttpd.conf
IF %errorlevel% GTR 0 (
ECHO Starting lighttpd failed!
PAUSE
) ELSE (
ECHO Starting lighttpd succeed!
)
运行fastcgi php:
a.先確保在conf中使用mod_fastcgi,和配置了fastcgi.server;
b.start_lighttpd - fastcgi.bat,RunHiddenConsole.exe 在官方网站有下(也可以不使用,不过回留下一个cmd的窗口)
代碼:
@ECHO OFF
ECHO Starting PHP FastCGI...
#運行php-cgi.exe
RunHiddenConsole.exe ..\PHP\php-cgi.exe -b 127.0.0.1:521
ECHO Starting LightTPD...
ECHO.
lighttpd.exe -v
ECHO.
lighttpd.exe -f etc\lighttpd.conf -m lib
EXIT
關閉Lighttpd:
stop_lighttpd - cgi.bat
代碼:
@ECHO OFF
ECHO Stoping lighttpd...
bin\Process -k LightTPD.exe
ping 127.0.0.1 > NUL
stop_lighttpd_fastcgi.bat
代碼:
@ECHO OFF
ECHO Stopping LightTPD...
bin\process.exe -k lighttpd.exe >nul
ECHO Stopping PHP FastCGI...
bin\process.exe -k php-cgi.exe >nul
ECHO.
EXIT
重啓Lighttpd:
restart_lighttpd.bat
代碼:
@ECHO OFF
CALL stop_lighttpd.bat
CALL start_lighttpd.bat
5.也可以去bin目錄把lighttpd配置成windows的系統服務。
lighttpd特點:
相較于其他的網頁服務器,lighttpd僅需少量的內存及CPU資源即可達到同樣的效能。
lighttpd
Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。
Lighttpd使用fastcgi方式運行php,它會使用很少的PHP進程響應很大的並發量。
Fastcgi的優點在于:
从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.
从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,
从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)
从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)
nginx與lighttpd性能簡單對比
做nginx和lighttpd的性能對比,可以在選擇webserver上做個參考。
測試環境如下
Dell2950 4G内存,FreeBSD 8.2 release
#sysctl -a | grep CPU
hw.model: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
2x2顆
內存4G
#uname -a
FreeBSD localhost.localdomain 8.2-RELEASE
php5.2.17,fastcgi方式,默認5進程測試,失敗請求太多,改用20進程,無請求失敗。
Nginx主要配置
events {
use kqueue;
worker_connections 102400;
}
寫了個phpinfo用ab測試,內網IP,不考慮帶寬因素。
# ab -n 100000 -c 1000 http://192.168.100.28/info.php
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.100.28 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Finished 100000 requests
Server Software: nginx/1.0.0
Server Hostname: 192.168.100.28
Server Port: 80
Document Path: /info.php
Document Length: 49457 bytes
Concurrency Level: 1000
Time taken for tests: 86.578 seconds
Complete requests: 100000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 4977355920 bytes
HTML transferred: 4961202790 bytes
Requests per second: 1155.03 [#/sec] (mean)
Time per request: 865.78 [ms] (mean)
Time per request: 0.87 [ms] (mean, across all concurrent requests)
Transfer rate: 57489.84 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 297 888.8 11 6414
Processing: 20 555 649.9 421 9989
Waiting: 18 555 649.9 421 9988
Total: 20 852 1065.3 473 10222
Percentage of the requests served within a certain time (ms)
50% 473
66% 584
75% 699
80% 776
90% 3308
95% 3473
98% 3688
99% 3817
100% 10222 (last request)
iostat -w 1
tty mfid0 da0 cd0 cpu
tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id
0 23 19.12 1 0.01 0.01 0 0.00 0.00 0 0.00 0 0 0 0 100
0 235 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
0 79 2.00 3 0.01 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
4 393 2.00 2 0.00 0.00 0 0.00 0.00 0 0.00 10 0 4 2 85
0 78 123.85 54 6.52 0.00 0 0.00 0.00 0 0.00 76 0 17 7 0
0 76 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 72 0 16 8 5
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 81 0 12 5 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 74 0 15 7 3
0 79 16.95 19 0.31 0.00 0 0.00 0.00 0 0.00 71 0 19 8 2
0 78 21.60 10 0.21 0.00 0 0.00 0.00 0 0.00 74 0 17 7 2
0 78 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 74 0 17 8 1
0 78 53.33 3 0.16 0.00 0 0.00 0.00 0 0.00 68 0 21 10 1
0 104 20.20 20 0.39 0.00 0 0.00 0.00 0 0.00 68 0 18 10 5
磁盤壓力只在測試開始時大,並且因爲所有東西都放在一台服務器,瞬間最高把CPU空閑率幹到了0.3%,但實際上占用CPU最多的是ab,占了40%多,nginx占用不到40%
------------------------------------------------換lighttpd
server.max-fds = 8192
##
## Stat() call caching.
##
## lighttpd can utilize FAM/Gamin to cache stat call.
##
## possible values are:
## disable, simple or fam.
##
server.stat-cache-engine = "simple"
##
## Fine tuning for the request handling
##
## max-connections == max-fds/2 (maybe /3)
## means the other file handles are used for fastcgi/files
##
Server.max-connections = 4096
也是使用kqueue隊列
# ab -n 100000 -c 1000 http://192.168.100.28/info.php
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.100.28 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Finished 100000 requests
Server Software: lighttpd/1.4.28
Server Hostname: 192.168.100.28
Server Port: 80
Document Path: /info.php
Document Length: 49127 bytes
Concurrency Level: 1000
Time taken for tests: 83.107 seconds
Complete requests: 100000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 4932575365 bytes
HTML transferred: 4915304142 bytes
Requests per second: 1203.27 [#/sec] (mean)
Time per request: 831.07 [ms] (mean)
Time per request: 0.83 [ms] (mean, across all concurrent requests)
Transfer rate: 59352.10 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 19 206.2 1 3113
Processing: 79 807 155.8 823 3891
Waiting: 66 807 155.8 823 3890
Total: 79 826 251.0 826 4248
Percentage of the requests served within a certain time (ms)
50% 826
66% 843
75% 854
80% 862
90% 894
95% 939
98% 1006
99% 1094
100% 4248 (last request)
# iostat -w 1
tty mfid0 da0 cd0 cpu
tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id
0 23 19.25 1 0.01 0.01 0 0.00 0.00 0 0.00 0 0 0 0 100
0 387 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 99
0 78 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
4 2185 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 47 0 14 7 33
0 78 120.00 2 0.23 0.00 0 0.00 0.00 0 0.00 68 0 23 9 1
0 2405 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 77 0 14 6 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 71 0 17 10 2
0 1852 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 72 0 18 8 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 62 0 22 7 10
0 1143 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 68 0 20 9 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 65 0 25 8 2
0 2074 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 69 0 22 8 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 65 0 23 10 3
0 1917 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 62 0 26 10 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 63 0 25 8 5
0 2247 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 66 0 23 8 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 66 0 25 7 2
0 1373 48.00 7 0.33 0.00 0 0.00 0.00 0 0.00 66 0 22 8 4
看起來,lighttpd在磁盤上並沒有nginx那樣的瞬間壓力。