apache / lighttpd / nginx 三大開放WEB伺服器評比
一.Web Serve介紹(apache / lighttpd / nginx)
1. lighttpd
Lighttpd是一個具有非常低的記憶體開銷,cpu佔用率低,效能好,以及豐富的模組等特點。lighttpd是眾多OpenSource羽量級的web server中較為優秀的一個。支援FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能。
Lighttpd使用fastcgi方式運行php,它會使用很少的PHP進程回應很大的併發量。
Fastcgi的優點在於:
1)從穩定性上看, fastcgi是以獨立的進程池運行來cgi,單獨一個進程死掉,系統可以很輕易的丟棄,然後重新分配新的進程來運行邏輯.
2)從安全性上看, fastcgi和宿主的server完全獨立, fastcgi怎麼down也不會把server搞垮.
3)從性能上看, fastcgi把動態邏輯的處理從server中分離出來, 大負荷的IO處理還是留給宿主server, 這樣宿主server可以一心一意作IO,對於一個普通的動態網頁來說, 邏輯處理可能只有一小部分, 大量的圖片等靜態IO處理完全不需要邏輯程式的參與.
4)從擴展性上講, fastcgi是一個中立的技術標準, 完全可以支援任何語言寫的處理程式(php,java,python…)
2.apache
apache是世界排名第一的web伺服器, 根據netcraft(http://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,它的發音為“engine X”, 是一個高性能的HTTP和反向代理伺服器,同時也是一個IMAP/POP3/SMTP 代理伺服器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點開發.
Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的記憶體洩漏問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。
但是Nginx並不支援cgi方式運行,原因是可以減少因此帶來的一些程式上的漏洞。所以必須使用FastCGI方式來執行PHP程式。
nginx做為HTTP伺服器,有以下幾項基本特性:
1)處理靜態檔,索引檔以及自動索引;打開文件描述符緩衝.
2)無緩存的反向代理加速,簡單的負載均衡和容錯.
3)FastCGI,簡單的負載均衡和容錯.
4)模組化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其他代理伺服器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。
5)Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率。它支援內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。
6)Nginx具有很高的穩定性。其他HTTP伺服器,當遇到訪問的峰值,或者有人惡意發起慢速連接時,也很可能會導致伺服器實體記憶體耗盡頻繁交換,失去回應,只能重啟伺服器。例如當前apache一旦上到200個以上進程,web回應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與記憶體佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M記憶體,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。
7)Nginx支持熱部署。它的啟動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下,對軟體版本進行進行升級。
server |
Apache |
Nginx |
Lighttpd |
Proxy代理 |
非常好 | 非常好 | 一般 |
Rewriter |
好 | 非常好 | 一般 |
Fcgi |
不好 | 好 | 非常好 |
熱部署 | 不支持 | 支持 | 不支持 |
系統壓力比較 | 很大 | 很小 | 比較小 |
穩定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
技術支援 | 非常好 | 很少 | 一般 |
靜態檔處理 | 一般 | 非常好 | 好 |
Vhosts虛擬主機 |
支持 | 不支持 | 支持 |
反向代理 | 一般 | 非常好 | 一般 |
Session sticky |
支持 | 不支持 | 不支持 |
建議方案—-
Apache:後臺伺服器(主要處理php及一些功能請求 如:中文url)
Nginx:前端伺服器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求)
Lighttpd:圖片伺服器
nginx 的模組
整體採用模組化設計是nginx的一個重大特點,甚至http伺服器核心功能也是一個模組。要注意的是:nginx的模組是靜態的,添加和刪除模組都要對nginx進行重新編譯,這一點與Apache的動態模組完全不同。
與PHP的整合
目前使用FastCGI+Nginx執行PHP應用時如果配置檔案設定不合理,並不是十分可靠。建議使用NAMP架構(Nginx+Apache+Mysql+PHP),即使用Nginx處理靜態請求,並將動態請求反向代理給Apache處理。