1. 程式人生 > >當面對nginx和apache我們該如何選擇?

當面對nginx和apache我們該如何選擇?

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

2.Nginx:
Nginx是由俄羅斯軟體工程師Igor Sysoev編寫的免費開源Web伺服器。自從2004年上市以來,nginx專注於高效能,高併發性和低記憶體使用。並且其在負載均衡,快取,訪問和頻寬控制以及與各種應用程式高效整合等方面的特性,都使得它逐步深受廣大使用者青睞。

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

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的工作程序是單執行緒的,每個執行緒可以非同步的處理大量的使用者請求。

與Apache不同,Nginx是通過非同步的、非阻塞的、事件驅動的方式在實現的。Nginx的工作程序是單執行緒的,每個執行緒可以非同步的處理大量的使用者請求。

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

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

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

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