lighttpd和nginx對比以及Nginx、Lighttpd與Apache的區別

背景

lighttpd和nginx是近年來兩個流行的高性能web server。nginx在近幾年冒起很快,根據netcraft對2010年2月所有網站域名的web server市場份額調查顯示,nginx佔據第4位,已明顯超越了lighttpd,如下圖示:

百度有一些服務使用lighttpd,我們希望對 nginx開展調研,並和lighttpd進行對比。
概述
Nginx和lighttpd基本上是同質的,都是採用基於epoll/kqueue/select的全異步事件模型,可以輕鬆地維持大量的連接,不懼怕慢連接攻擊。兩者都提供了豐富的HTTP服務功能,例如壓縮、url rewrite、虛擬主機、SSL、proxy等等。
Nginx大量模仿了apache的設計風格,比如模塊的定義、裝配、以及配置數據的解析和組織方式等等。Lighttpd則是自己設計的一套。 和lighttpd相比,Nginx做事更加精細,它提供的一些比較特別。
Nginx的代碼入手更困難一些(主觀看法)。舉個例子,Nginx內部的HTTP狀態遷移是比較隱性的,它通過一系列的handler賦值來實現,如果要完整地追蹤一次HTTP請求的處理過程,比較費勁。這個就說明,一旦出了問題,追查比較困難。而lighttpd的代碼中有一個顯式的HTTP狀態遷移,一目瞭然,相比之下比較好看一些。
擴展模塊開發方面,nginx的module模仿了apache的設計和實現方式,和lighttpd是完全不同的。主觀感覺上nginx模塊開發的入門門檻更高一些,因爲必須弄清楚nginx的內部運行機制纔好確認你寫的代碼到底有沒有問題和隱患。
和lighttpd一樣,nginx同樣存在着開發文檔很少的問題。最好的文檔還是源碼本身。
功能
Nginx完全不支持動態庫so,所以它的模塊都必須靜態編譯,且不能動態加載。要加載哪些模塊,模塊按照怎樣的順序執行,都是在編譯期由 configure指定的,如果要調整,也只能重新編譯一遍,無法通過改配置來實現。在這方面,Lighttpd做得比nginx好。Lighttpd支 持動態so,並且可以在配置文件中調整各模塊的先後順序,在某些應用場景下,調整模塊的先後順序是很有用的。
條件配置語法的靈活性,lighttpd比nginx要好一些。Lighttpd可以很方便地配置成這樣:
$HTTP[“url”] =~ “…” {
Proxy-core.backends = (“10.1.1.1:8080”, “10.1.1.2:8080”, …)
Proxy-core.balancer = “round-robin”
Proxy-core.protocol = “http”
……
}

$HTTP[“host”] =~ “…” {
Access.deny-all = “enable”
}

$HTTP[“useragent”] =~ “…” {
url.redirect = (“” => “http://example.com/”)
url.redirect-code = 302
}

$HTTP[“url”] =~ “…” {
$HTTP[“querystring”] =~ “…” {
$HTTP[“referer”] =~ “…” {

}
}
}
在nginx中,如果模塊本身沒提供條件支持的話,需要依賴rewrite模塊做一次內部跳轉,把變化反映到url上,再通過location使其生效。
在一些具體的功能點上,nginx和lighttpd各有特點:
有一些比較細節的地方,nginx考慮得比lighttpd周全,比如nginx可以配置HTTP頭部的長度、HTTP請求的讀寫超時 等,lighttpd的官方版本是不支持的,百度對此進行了改良。再例如nginx可以配置listen隊列長度、nginx進程起來後 掛在哪個CPU核上運行,lighttpd現在還不支持。
Nginx的proxy功能比lighttpd強大,主要是proxy cache,另外還有一些細節上的處理。比如nginx支持4xx/5xx錯誤自動重試下一個後端。但是Lighttpd的proxy現在還支持scgi 和ajp兩種後端轉發協議,nginx不支持。
Nginx有一些比較有特色的功能module,例如:
1)secure_link,可以用來防盜鏈,目前在CDN上有應用。這個功能很不錯,可以考慮在lighttpd上開發相應的模塊。
2)geoip,用戶給配置一個ip地理信息數據文件,nginx可以以此爲根據,判斷客戶端ip來自哪個國家和城市。

性能
根據簡單性能對比,Nginx的性能比lighttpd略好。原因可能有以下幾方面:
1. Lighttpd啓動了幾個輔助線程,有加鎖競爭行爲,這樣會使性能有所降低(線程個數是可配的,這裏還有優化的餘地);nginx完全不涉及線程,不加鎖。
2. Lighttpd有動態so,nginx全靜態編譯,動態庫執行效率比靜態慢大約5%~10%左右。
3. Nginx在細節優化上可能做得更好一些。例如nginx的epoll是ET(邊緣觸發)的,而lighttpd的epoll是LT(水平觸發)的。
nginx的性能要好一些,不過對大多數應用來說,lighttpd的性能指標已夠用了,一個系統主要的瓶頸往往是在後端。由於lighttpd具有動態模塊的加載能力,適合非常需要靈活配置的場合。
總體而言,nginx和lighttpd都是非常好的web server選擇。

 

 

三大WEB服務器對比分析(apache ,lighttpd,nginx)

一.軟件介紹(apache lighttpd nginx)

1. 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...)

2.apache

apache是世界排名第一的web服務器, 根據netcraft(www.netsraft.co.uk)所作的調查,世界上百分之五十以上的web服務器在使用apache.

19954, 最早的apache(0.6.2)apache group公佈發行. apache group 是一個完全通過internet進行運作的非盈利機構, 由它來決定apache web服務器的標準發行版中應該包含哪些內容. 准許任何人修改隱錯, 提供新的特徵和將它移植到新的平臺上, 以及其它的工作. 當新的代碼被提交給apache group, 該團體審覈它的具體內容, 進行測試, 如果認爲滿意, 該代碼就會被集成到apache的主要發行版中.

apache 的特性:

1) 幾乎可以運行在所有的計算機平臺上.

2) 支持最新的http/1.1協議

3) 簡單而且強有力的基於文件的配置(httpd.conf).

4) 支持通用網關接口(cgi)

5) 支持虛擬主機.

6) 支持http認證.

7) 集成perl.

8) 集成的代理服務器

9) 可以通過web瀏覽器監視服務器的狀態, 可以自定義日誌.

10) 支持服務器端包含命令(ssi).

11) 支持安全socket(ssl).

12) 具有用戶會話過程的跟蹤能力.

13) 支持fastcgi(只在apache1.3時支持,apache2以後的版本不再支持了)

14) 支持java servlets

15) 不支持epoll(這年頭,epoll幾乎是性能的必備,這也是爲什麼apache的併發性能比其他兩款web軟件差的主要原因吧)

16) 非常好用的proxy和proxy_ajp(很多人用它作爲tomcat的前端)

3.nginx

Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲“engine X”是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器.Nginx是由俄羅斯人 Igor Sysoev爲俄羅斯訪問量第二的 Rambler.ru站點開發.

Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的內存泄漏問題,而且Lighttpdmod_proxy也有一些問題並且很久沒有更新。但是Nginx並不支持cgi方式運行,原因是可以減少因此帶來的一些程序上的漏洞。所以必須使用FastCGI方式來執行PHP程序。

nginx做爲HTTP服務器,有以下幾項基本特性:

處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝.

無緩存的反向代理加速,簡單的負載均衡和容錯.

FastCGI,簡單的負載均衡和容錯.

模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filterfilter。如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。

Nginx專爲性能優化而開發,性能是其最重要的考量,實現上非常注重效率。它支持內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。

Nginx具有很高的穩定性。其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只佔2.5M內存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginxlighthttpd更勝一籌。

Nginx支持熱部署。它的啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。

.3WEB服務器的比較:

server

Apache

Nginx

Lighttpd

Proxy代理

非常好

非常好

一般

Rewriter

非常好

一般

Fcgi

不好

非常好

熱部署

不支持

支持

不支持

系統壓力比較

很大

很小

比較小

穩定性

非常好

不好

安全性

一般

一般

技術支持

非常好

很少

一般

靜態文件處理

一般

非常好

Vhosts虛擬主機

支持

不支持

支持

反向代理

一般

非常好

一般

Session sticky

支持

不支持

不支持

epoll

不支持

支持

支持

注:在相對比較大的網站,節約下來的服務器成本無疑是客觀的。而有些小型網站往往服務器不多,如果採用 Apache 這類傳統 Web 服務器,似乎也還能撐過去。但有其很明顯的弊端: Apache 在處理流量爆發的時候(比如爬蟲或者是 Digg 效應) 很容易過載,這樣的情況下采用 Nginx 最爲合適。

建議方案:

Apache 後臺服務器(主要處理php及一些功能請求如:中文url

Nginx 前端服務器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求)

Lighttpd 圖片服務器

總體來說,隨着nginx功能得完善將使他成爲今後web server得主流。

.性能測試

將分別測試3種軟件在對動態頁面和靜態頁面請求及併發時的響應時間

l靜態頁面搜狐首頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

64

60

462.75

21.6

100000/200

67

60

312.07

32.4

100000/500

83

60

137.24

72.8

100000/1000

出現錯誤丟包

94

60

126.6

78.9

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

34.6

140

943.66

10.597

100000/200

35.6

110

924.32

10.818

100000/500

34.3

110

912.68

10.956

100000/1000

37

160

832.59

12.106

APACHE

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

40.6

170

690.72

14.47

100000/200

41.1

180

685.39

14.59

100000/500

42.3

190

633.64

15.78

100000/1000

43.1

200

547.53

18.26

l動態頁面內部社區首頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

50

200

33.54

29.816

1000/200

52

210

30.43

32.858

1000/500

54

230

25.79

38.76

1000/1000

62

250

24.83

40.28

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

53.8

250

83.12

12.305

1000/200

55.8

250

74.05

13.504

1000/500

56

260

58.99

16.951

1000/1000

58

260

43.41

23.347

APACHE

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

60

200

27.37

36.541

100000/200

61

220

23.82

41.981

100000/500

73

150

20.59

48.562

100000/1000

53

200

27.18

36.796

lPHPINFO函數頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

45

20

168.06

59.504

100000/200

47

22

140.64

71.103

100000/500

49

24

52.80

189.386

100000/1000

在請求到4840時測試測試程序死掉

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

70

120

143.46

69.706

100000/200

72

130

140.57

71.140

100000/500

73

150

135.87

73.601

100000/1000

77

160

132.18

75.657

APACHE 出現丟包

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

70

180

245.73

40.694

100000/200

72

190

245.79

40.684

100000/500

75

200

241.29

41.443

100000/1000

77

220

236.74

42.239

四.各大網站WEB服務器資源列表

網站名操作系統 web服務器

1.門戶網站類:

搜狐 LINUX apache 1.3.37

新浪 LINUX apache 2.0.54

迅雷 LINUX nginx 0.6.31

163 LINUX apache 2.2.6

2.搜索類

百度 unknown BWS 1.0

Google linux gws

Sougou FreeBSD apache 2.2.4

Hao123 linux apache 2.2.4

4. 電子郵箱類

126 linux apache

Hotmail win2003 microsoft-IIS 6.0

新浪郵箱 F5 Big-IP apache 2.2.8

263 linux apache 2.2.6

5. 博客類

新浪博客 linux nginx 0.5.35

搜狐博客 linux nginx

迅雷博客 linux nginx 0.6.32

天涯博客 F5 Big-IP Microsoft-IIS/5.0

6.視頻類

優酷 linux apache

土豆 linux apache

Ku6 linux apache

六間房 linux nginx 0.6.14

Lighttpd:單臺支持上萬併發;請求處理速度是Apache3-5倍;對多CPU支持不太好;有內存泄漏問題
典型範例-YouTubeMopSF、豆瓣
豆瓣如今很多lightty也改爲Nginx了,留下圖片服務器使用lighttpd

Nginx(Engin X)
處理速度比Lighttpd10%-15%;在Proxy方面,Nginx>Lighttpd;在FastCGI支持方面,Lighttpd>Nginx;典型範例-六間房,新浪Blog

Apache
使用範圍最廣;在高負載環境下,性能不突出,單臺僅能承受上千個併發數;對DOS(拒絕服務攻擊)抵禦能力差;只有Apache 1.3FastCGI有支持,不適合使用3PPHPPerlPython)的Web2.0站點

如果是新興的Web Server 2.0站點,LighttpdNginx憑藉對FastCGI的支持,和高負載下的良好表現,將會是最好的選擇;如果是傳統站點,Apache是最通用的選擇。

http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html
http://weavesky.com/2007/12/18/apache-nginx-lighttpd/
http://99dev.net/archives/103

參考地址 http://blog.chinaunix.net/u2/61187/showart_1985104.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章