概述
今天主要對比下這幾個主流的WEB服務器:lighttpd、apache、nginx
1、LIGHTTPD
1.1簡述
Lighttpd 是一個德國人領導的開源Web服務器軟件,具有非常低的內存開銷,cpu佔用率低,效能好,以及豐富的模塊等特點。支持FastCGI, CGI, Auth,輸出壓縮(output compress), URL重寫, Alias等重要功能。
它使用FastCGI方式運行PHP時,將使用很少的PHP進程響應很大的並發量。
1.2 優點
1)從穩定性上看,FastCGI是以獨立的進程池運行來CGI,單獨一個進程死掉,系統可以很輕易的丟棄,然後重新分配新的進程來運行邏輯;
2)從安全性上看, FastCGI和宿主的server完全獨立, fastcgi怎麼down也不會把server搞垮;
3)從性能上看, FastCGI把動態邏輯的處理從server中分離出來,大負荷的IO處理還是留給宿主server,這樣宿主server可以一心一意作IO,對於一個普通的動態網頁來說,邏輯處理可能只有一小部分, 大量的圖片等靜態IO處理完全不需要邏輯程序的參與(注1)
4)從擴展性上講,FastCGI是一個中立的技術標準,完全可以支持任何語言寫的處理程序(php,java,python…)
1.3 支持操作系統
- Linux(binary packages for FC3,SuSE,Debian,Gentoo,PLD-Linux,OpenWRT)
- BSD(FreeBSD,NetBSD,OpenBSD,MacOSX)
- SGIIRIX
- Windows(Cygwin)While it is known to compile cleanly on
- Solaris
- AIX
2、APACHE
2.1 簡述
Apache是世界排名第一的web服務器,根據所作的調查,世界上百分之五十以上的web服務器在使用apache。
Apache是以進程為基礎的結構,進程要比線程消耗更多的系統開支,不太適合於多處理器環境,因此,在一個Apache Web站點擴容時,通常是增加服務器或擴充群集節點而不是增加處理器。世界上很多著名的網站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的產物。
2.2 優點
- 幾乎可以運行在所有的計算機平台上.
- 支持最新的http/1.1協議
- 簡單而且強有力的基於文件的配置(httpd.conf).
- 支持通用網關接口(cgi)
- 支持虛擬主機.
- 支持http認證.
- 集成perl.
- 集成的代理服務器
- 可以通過web瀏覽器監視服務器的狀態,可以自定義日誌.
- 支持服務器端包含命令(ssi).
- 支持安全socket層(ssl).
- 具有用戶會話過程的跟蹤能力.
- 支持fastcgi
- 支持java servlets
2.3 支持操作系統
- Linux
- Windows
- 其他
3、NGINX
3.1簡述
Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音為“engine X”, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP代理服務器。Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點開發。Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
Nginx以事件驅動(epoll)的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡,有研究表明能支持高達 50,000個並發連接數。。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的內存泄漏問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。但是Nginx並不支持cgi方式運行,原因是可以減少因此帶來的一些程序上的漏洞。所以必須使用FastCGI方式來執行PHP程序。
3.2優點
- 處理靜態文件,索引文件以及自動索引;
- 打開文件描述符緩衝;
- 無緩存的反向代理加速,簡單的負載均衡和容錯;
- FastCGI,簡單的負載均衡和容錯;
- 模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。
- Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率
- Nginx具有很高的穩定性。其它HTTP服務器,當遇到訪問的峰值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啟服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只佔2.5M內存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。
- Nginx支持熱部署。它的啟動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。
3.3操作系統
- Linux
- Windows(移植版本)
- 其他
3.4 推薦架構
nginx作為最前端的web cache系統,通常的架構如下
這個結構的優點:
- 可以使用nginx前端進行諸多複雜的配置,這些配置從前在squid是沒法做或者做起來比較麻煩的,比如針對目錄的防盜鏈。
- nginx前端可以直接轉發部分不需要緩存的請求。
- 因為nginx效率高於squid,所以某些情況下可以利用nginx的緩存來減輕squid壓力。
- 可以實現url hash等分配策略
- 可以在最前端開啟gzip壓縮,這樣後面的squid緩存的純粹是無壓縮文檔,可以避免很多無謂的穿透。
- 因為nginx穩定性比較高,所以lvs不需要經常調整,通過nginx調整就可以。
- squid的文件打開數按默認的1024就綽綽有餘,不過處理的請求可一個都不會少。
- 可以啟用nginx的日誌功能取代squid,這樣做實時點擊量統計時可以精確定位到url,不必要再用低效率的grep來過濾。
- 因為nginx的負載能力高於squid,所以在用lvs分流時可以不必分得特別均衡,出現單點故障的幾率比較低。
nginx和squid配合搭建的web服務器前端系統架構:
前端的lvs和squid,按照安裝方法,把epoll打開,配置文件照搬,基本上問題不多。
這個架構和app_squid架構的區別,也是關鍵點就是:加入了一級中層代理,中層代理的好處實在太多了:
- gzip壓縮:壓縮可以通過nginx做,這樣,後台應用服務器不管是apache、resin、lighttpd甚至iis或其他古怪服務器,都不用考慮壓縮的功能問題。
- 負載均衡和故障屏蔽:nginx可以作為負載均衡代理使用,並有故障屏蔽功能,這樣,根據目錄甚至一個正則表達式來制定負載均衡策略變成了小case。
- 方便的運維管理,在各種情況下可以靈活制訂方案。
- 權限清晰:這台機器就是不寫程序的維護人員負責,程序員一般不需要管理這台機器,這樣假如出現故障,很容易能找到正確的人。對於應用服務器和數據庫服務器,最好是從維護人員的視線中消失,我的目標是,這些服務只要能跑得起來就可以了,其它的事情全部可以在外部處理掉。
3種WEB服務器的比較
以下是針對這三個web服務器的一些比較:
從上面的分析比較建議的一種方案是:
- Apache後台服務器(主要處理php及一些功能請求 如:中文url)
- Nginx 前端服務器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求)
- Lighttpd圖片服務器
後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~