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

2017-05-11 17:15:00
GavinHsueh
原創
17220

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服務器市場份額對比圖:


數據來源: https://news.netcraft.com/archives/2017/04/21/april-2017-web-server-survey.html

二、對比

雖然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的工作原理圖:

圖片來源: http://www.aosabook.org/en/nginx.html

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

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

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


三、總結

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

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

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


聯系我們

聯系人:ZSITE交流群

電話/微信:

Email:

QQ:

地址:青島市黃島區井岡山路157號中南金石國際廣場A座3205室

亚洲午夜精品A片一区二区无码l