首頁  >  文章  >  後端開發  >  Apache和Nginx如何選擇

Apache和Nginx如何選擇

*文
*文原創
2017-12-22 10:20:045794瀏覽

市場上WEB伺服器產品眾多,主流的當數Apache和Nginx。可是Apache和Nginx之間該如何選擇,也讓許多新手有些困惑。本文透過Apache和Nginx驚進行對比,讓大家有更清楚的理解與選擇。

一、介紹

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

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

以下是2017年11月21日更新的最新web伺服器市場份額比較圖:

Apache和Nginx如何選擇

##二、對比

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

1.連結處理

Apache和Nginx最大的差異在於它們對連線的處理方式。 Apache提供一系列多重處理模組,透過這些多重處理模組來使用作業系統的資源,對進程和執行緒池進行管理,控制處理使用者請求。

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

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


Apache和Nginx如何選擇

mpm_worker:與prefork不同,worker中子程序是多執行緒的,每個執行緒管理一個使用者連線。執行緒數要多於行程數量,這也意味著新的連線能立刻得到一個空閒的線程,而不用等待行程空閒。

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


Apache和Nginx如何選擇

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



Apache和Nginx如何選擇


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

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

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

三、總結

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

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

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


相關閱讀:

#如何在Ubuntu 16.04下方設定Apache HTTP Serve

CentOS7中apache與php7及mysql5.7的安裝設定詳解

LNMP環境更換Nginx伺服器為Tengine的範例程式碼

Nginx反向代理程式與負載平衡實作


#

以上是Apache和Nginx如何選擇的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn