標籤:

WEB伺服器如何選擇 Apache or Nginx?

Web伺服器是直接影響網站性能的關鍵因素,也是每個站長選擇網站運營環境時必然考慮的問題。目前Web伺服器市場產品眾多,最為主流和代表性的當屬Apache、Nginx以及微軟的IIS。本文目的是通過Apache和Nginx進行對比,從而幫助廣大用戶們能夠選擇適合自己的Web伺服器。

一、簡介

Apache:

Apache創建於1995年,並從 1999 年開始在 Apache 軟體基金會旗下進行開發。Apache靈活、高效,擁有豐富的擴展模塊,以及活躍的社區支持,成為目前世界上最為主流的開源免費的Web伺服器軟體。

Nginx:

Nginx是由俄羅斯軟體工程師Igor Sysoev編寫的免費開源Web伺服器。自從2004年上市以來,nginx專註於高性能,高並發性和低內存使用。並且其在負載均衡,緩存,訪問和帶寬控制以及與各種應用程序高效集成等方面的特性,都使得它逐步深受廣大用戶青睞。

下面是2017年4月份更新的web伺服器市場份額對比圖:

數據來源:April 2017 Web Server Survey

二、對比

雖然Apache和Nginx各自的背景不同,但他們的作用目的是一致的,簡單說就是接收用戶請求,然後處理請求,最後將處理結果返回給用戶。

1.鏈接處理

Apache和Nginx最大的不同在於它們對連接的處理方式。Apache提供一系列多重處理模塊,通過這些多重處理模塊來使用操作系統的資源,對進程和線程池進行管理,控制處理用戶請求。

Apache提供了三種多重處理模塊:mpm_prefork、mpm_worker、mpm_envent,下面我們做簡要說明對比。

mpm_prefork:模塊產生眾多子進程,每個子進程是單線程的,每個線程鏈接一個請求,如此一對一的關係。所以如果請求數大於進程數時,伺服器的性能就表現得差強人意了。

mpm_worker:與prefork不同,worker中子進程是多線程的,每個線程管理一個用戶連接。線程數要多於進程數量,這也就意味著新的連接能立刻得到一個空閑的線程,而不用等待進程空閑。

mpm_event:該模塊與worker相似,區別在於event可以處理長連接(keep-alive),以避免線程被請求長期佔用而造成資源浪費,同時也增強了高並發場景下的請求處理能力。

與Apache不同,Nginx是通過非同步的、非阻塞的、事件驅動的方式在實現的。Nginx的工作進程是單線程的,每個線程可以非同步的處理大量的用戶請求。下面是Nginx的工作原理圖:

圖片來源:The Architecture of Open Source Applications (Volume 2): nginx

2.靜態與動態內容的處理

無論是靜態還是動態內容,Apache都可以處理,Apache具有內置的解析和執行各種動態腳本語言(包括PHP,Python和Perl)的功能,無需藉助外部處理器。

毫無疑問,動態內容處理恐怕是Nginx的痛點。Nginx處理動態內容的效率並不高,且需藉助外部的處理器。所以如果您的站點具有很多動態功能,Apache的表現可能會更切合你意。不過雖然與Apache相比Nginx的動態內容處理能力不佳,但其靜態內容處理還是很高效的。

三、總結

Apache擁有豐富的模塊組件支持,穩定性強,BUG少,動態內容處理強。

Nginx輕量級,佔用資源少,負載均衡,高並發處理強,靜態內容處理高效。

存在即有道理,Apache和Nginx作為WEB服務各有所長,個人認為二者並不存在將來誰會完全替代誰。關鍵在於用戶要認真考慮清楚自己的應用場景,根據自己的需求和情況來斟酌選擇哪個產品,適合自己的才是最好的。

企業門戶建站系統推薦:蟬知企業門戶系統


推薦閱讀:

tomcat 與 nginx,apache的區別是什麼?
Apache Kylin 深入Cube和查詢優化 提升Cube
React 路/粉/黑 都該了解的 React license 爭議
怎樣正確做 Web 應用的壓力測試?

TAG:Apache |