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.

1995年4月, 最早的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

14) 支持java servlets

3.nginx

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

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

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

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

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

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

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

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

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

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

.3WEB服務器的比較:

 

server

Apache

Nginx     

Lighttpd

 

Proxy代理

非常好

非常好

一般

 

Rewriter

非常好

一般

 

Fcgi

不好

非常好

 

熱部署

不支持

支持

不支持

 

系統壓力比較

很大

很小

比較小

 

穩定性

非常好

不好

 

安全性

一般

一般

 

技術支持

非常好

很少

一般

 

靜態文件處理

一般

非常好

 

Vhosts虛擬主機

支持

不支持

支持

 

反向代理

一般

非常好

一般

 

Session sticky

支持

不支持

不支持

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

建議方案:

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

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

Lighttpd 圖片服務器

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

Apache與Nginx的優缺點比較

1、nginx相對於apache的優點: 
輕量級,同樣起web 服務,比apache佔用更少的內存及資源 
抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的
,在高併發下nginx 能保持低資源低消耗高性能 
高度模塊化的設計,編寫模塊相對簡單 
社區活躍,各種高性能模塊出品迅速啊 
apache 相對於nginx 的優點: rewrite ,比nginx 的rewrite 強大動態頁面;
                                           模塊超多,基本想到的都可以找到;
                                           少bug ,nginx 的bug 相對較多;
                                         超穩定;

存在就是理由,一般來說,需要性能的web服務,用nginx。如果不需要性能只求穩定,那就apache吧。後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。這裏要注意一點,epoll(freebsd 上是 kqueue )網絡IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll 更高性能。當然,這只是根據網絡IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。 
2、作爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接併發的情況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟件平臺之一。能夠支持高達50,000個併發連接數的響應,感謝Nginx爲我們選擇了 epoll and kqueue 作爲開發模型. 
Nginx作爲負載均衡服務器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多. 
作爲郵件代理服務器: Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作爲郵件代理服務器), Last.fm 描述了成功並且美妙的使用經驗. 
Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的服務器: Nginx 啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動. 你還能夠不間斷服務的情況下進行軟件版本的升級 . 
3、Nginx 配置簡潔, Apache 複雜 
              Nginx 靜態處理性能比 Apache 高 3倍以上 
Apache 對 PHP 支持比較簡單,Nginx 需要配合其他後端用 
Apache 的組件比 Nginx 多 
現在 Nginx 纔是 Web 服務器的首選 
4、最核心的區別在於apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程 
5、nginx處理靜態文件好,耗費內存少.但無疑apache仍然是目前的主流,有很多豐富的特性.所以還需要搭配着來.當然如果能確定nginx就適合需求,那麼使用nginx會是更經濟的方式. 

apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集羣功能


6、從個人過往的使用情況來看,nginx的負載能力比apache高很多。最新的服務器也改用nginx了。而且nginx改完配置能-t測試一下配置有沒有問題,apache重啓的時候發現配置出錯了,會很崩潰,改的時候都會非常小心翼翼現在看有好多集羣站,前端nginx抗併發,後端apache集羣,配合的也不錯。

 

7、nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。 


8、nginx是很不錯的前端服務器,負載性能好,在老奔上開nginx,用webbench模擬10000個靜態文件請求毫不喫力。


9、Nginx優於apache的主要兩點:1.Nginx本身就是一個反向代理服務器 2.Nginx支持7層負載均衡;其他的當然,Nginx可能會比apache支持更高的併發,但是根據NetCraft的統計,2011年4月的統計數據,Apache依然佔有62.71%,而Nginx是7.35%,因此總得來說,Aapche依然是大部分公司的首先,因爲其成熟的技術和開發社區已經也是非常不錯的性能。 

10、你對web server的需求決定你的選擇。大部分情況下nginx都優於APACHE,比如說靜態文件處理、PHP-CGI的支持、反向代理功能、前端Cache、維持連接等等。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。 

11、可以看一下nginx lua模塊:https://github.com/chaoslaw...apache比nginx多的模塊,可直接用lua實現apache是最流行的,why?大多數人懶得更新到nginx或者學新事物 
12、對於nginx,我喜歡它配置文件寫的很簡潔,正則配置讓很多事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合做前端響應服務器 

13、Apache在處理動態有優勢,Nginx併發性比較好,CPU內存佔用低,如果rewrite頻繁,那還是Apache吧

    不管是Nginx還是Squid這種反向代理,其網絡模式都是事件驅動。事件驅動其實是很老的技術,早期的select、poll都是如此。後來基於內核通知的更高級事件機制出現,如libevent裏的epoll,使事件驅動性能得以提高。事件驅動的本質還是IO事件,應用程序在多個IO句柄間快速切換,實現所謂的異步IO。事件驅動服務器,最適合做的就是這種IO密集型工作,如反向代理,它在客戶端與WEB服務器之間起一個數據中轉作用,純粹是IO操作,自身並不涉及到複雜計算。反向代理用事件驅動來做,顯然更好,一個工作進程就可以run了,沒有進程、線程管理的開銷,CPU、內存消耗都小。

  所以Nginx、Squid都是這樣做的。當然,Nginx也可以是多進程 + 事件驅動的模式,幾個進程跑libevent,不需要Apache那樣動輒數百的進程數。Nginx處理靜態文件效果也很好,那是因爲靜態文件本身也是磁盤IO操作,處理過程一樣。至於說多少萬的併發連接,這個毫無意義。我隨手寫個網絡程序都能處理幾萬的併發,但如果大部分客戶端阻塞在那裏,就沒什麼價值。

  再看看Apache或者Resin這類應用服務器,之所以稱他們爲應用服務器,是因爲他們真的要跑具體的業務應用,如科學計算、圖形圖像、數據庫讀寫等。它們很可能是CPU密集型的服務,事件驅動並不合適。例如一個計算耗時2秒,那麼這2秒就是完全阻塞的,什麼event都沒用。想想MySQL如果改成事件驅動會怎麼樣,一個大型的join或sort就會阻塞住所有客戶端。這個時候多進程或線程就體現出優勢,每個進程各幹各的事,互不阻塞和干擾。當然,現代CPU越來越快,單個計算阻塞的時間可能很小,但只要有阻塞,事件編程就毫無優勢。所以進程、線程這類技術,並不會消失,而是與事件機制相輔相成,長期存在。

  總結之,事件驅動適合於IO密集型服務,多進程或線程適合於CPU密集型服務,它們各有各的優勢,並不存在誰取代誰的傾向。再盲目的言之Nginx可以取代Apache的,該好好反思了。


.性能測試

將分別測試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

l        PHPINFO函數頁

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

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