Web服務器是直接影響網(wǎng)站性能的關鍵因素,也是每個站長選擇網(wǎng)站運營環(huán)境時必然考慮的問題该押。目前Web服務器市場產品眾多疗杉,最為主流和代表性的當屬Apache、Nginx以及微軟的IIS蚕礼。本文目的是通過Apache和Nginx進行對比烟具,從而幫助廣大用戶們能夠選擇適合自己的Web服務器。
一奠蹬、簡介
Apache:
Apache創(chuàng)建于1995年朝聋,并從 1999 年開始在 Apache 軟件基金會旗下進行開發(fā)。Apache靈活囤躁、高效冀痕,擁有豐富的擴展模塊,以及活躍的社區(qū)支持狸演,成為目前世界上最為主流的開源免費的Web服務器軟件言蛇。
Nginx:
Nginx是由俄羅斯軟件工程師Igor Sysoev編寫的免費開源Web服務器。自從2004年上市以來宵距,nginx專注于高性能腊尚,高并發(fā)性和低內存使用。并且其在負載均衡满哪,緩存婿斥,訪問和帶寬控制以及與各種應用程序高效集成等方面的特性,都使得它逐步深受廣大用戶青睞哨鸭。
下面是2017年4月份更新的web服務器市場份額對比圖:
二民宿、對比
雖然Apache和Nginx各自的背景不同,但他們的作用目的是一致的像鸡,簡單說就是接收用戶請求活鹰,然后處理請求,最后將處理結果返回給用戶只估。
1.鏈接處理
Apache和Nginx最大的不同在于它們對連接的處理方式志群。Apache提供一系列多重處理模塊,通過這些多重處理模塊來使用操作系統(tǒng)的資源仅乓,對進程和線程池進行管理,控制處理用戶請求蓬戚。
Apache提供了三種多重處理模塊:mpm_prefork夸楣、mpm_worker、mpm_envent,下面我們做簡要說明對比豫喧。
mpm_prefork:模塊產生眾多子進程石洗,每個子進程是單線程的,每個線程鏈接一個請求紧显,如此一對一的關系讲衫。所以如果請求數(shù)大于進程數(shù)時,服務器的性能就表現(xiàn)得差強人意了孵班。
![](http://blog.cnezsoft.com/data/upload/201705/f_681cbba888bfa74214030c689c471982.png)
mpm_worker:與prefork不同涉兽,worker中子進程是多線程的,每個線程管理一個用戶連接篙程。線程數(shù)要多于進程數(shù)量枷畏,這也就意味著新的連接能立刻得到一個空閑的線程,而不用等待進程空閑虱饿。
![](http://blog.cnezsoft.com/data/upload/201705/f_d519a9df519a538ca8955b94b888a2c6.png)
mpm_event:該模塊與worker相似拥诡,區(qū)別在于event可以處理長連接(keep-alive),以避免線程被請求長期占用而造成資源浪費氮发,同時也增強了高并發(fā)場景下的請求處理能力渴肉。
![](http://blog.cnezsoft.com/data/upload/201705/f_95b74d3b1b9d2a6ad2574071c325c10a.png)
與Apache不同,Nginx是通過異步的爽冕、非阻塞的仇祭、事件驅動的方式在實現(xiàn)的。Nginx的工作進程是單線程的扇售,每個線程可以異步的處理大量的用戶請求前塔。下面是Nginx的工作原理圖:
2.靜態(tài)與動態(tài)內容的處理
無論是靜態(tài)還是動態(tài)內容,Apache都可以處理承冰,Apache具有內置的解析和執(zhí)行各種動態(tài)腳本語言(包括PHP华弓,Python和Perl)的功能,無需借助外部處理器困乒。
毫無疑問寂屏,動態(tài)內容處理恐怕是Nginx的痛點。Nginx處理動態(tài)內容的效率并不高,且需借助外部的處理器娜搂。所以如果您的站點具有很多動態(tài)功能迁霎,Apache的表現(xiàn)可能會更切合你意。不過雖然與Apache相比Nginx的動態(tài)內容處理能力不佳百宇,但其靜態(tài)內容處理還是很高效的考廉。
三、總結
Apache擁有豐富的模塊組件支持携御,穩(wěn)定性強昌粤,BUG少既绕,動態(tài)內容處理強。
Nginx輕量級涮坐,占用資源少凄贩,負載均衡,高并發(fā)處理強袱讹,靜態(tài)內容處理高效疲扎。
存在即有道理,Apache和Nginx作為WEB服務各有所長捷雕,個人認為二者并不存在將來誰會完全替代誰椒丧。關鍵在于用戶要認真考慮清楚自己的應用場景,根據(jù)自己的需求和情況來斟酌選擇哪個產品非区,適合自己的才是最好的瓜挽。
![](http://blog.cnezsoft.com/1PWHj6Hv43nKFF.gif)