為什麼我們使用Nginx而不是Apache?

2021-09-02 03:48:45 字數 1574 閱讀 2534

我們大多數的客戶在他們的伺服器上使用apache作為web伺服器,尤其是部署在乙個基於php系統的前端並且使用mod-php。鑑於擴張性和效能方面的原因,我們通常會建議他們改用nginx和fpm。

apache是非常強大的web伺服器,模組化結構,也是web服務端的鼻祖。除了**一些其他的工具外,apache已經成為了世上最廣泛部署的開源系統,直到最近,世界上大多數**仍執行著apache系統。

但是,apache並不是完美的,並且不再適合大規模系統。為什麼?因為他的程序模式雖然簡單而靈活,但並不適合大規模尤其是當要處理像php這種需要占用大量記憶體應用程式**時。

乙個典型的網路應用伺服器由兩部分組成。客戶端連線部分負責使用者瀏覽器與http連線,保持長時間的tcp/ip協議,通常是1到2分鐘。對於乙個大型的系統,伺服器可能要同時承擔和處理數以萬計的併發連線。

這直接與apache只有500條程序即500個http連線的處理能力上限相衝突。而現今的瀏覽器讓這個問題更加嚴重, 因為現在的瀏覽器平均每個主機會開啟六個**鏈結(幾年前是兩個**鏈結)。所以當超過100個使用者同時訪問時,apache就已經滿負荷了。

第二部分是應用程式處理部分,這部分承擔了**運算。在大多數系統中,這部分工作是最消耗ram和cpu資源的,因此程序數量必須被嚴格限制,通常是大約每 1gb的記憶體10個程序,或者每個cpu核心兩個程序。因此一台4gb ram、16核心的伺服器最多只能執行32個應用程式程序。

但是,問題的關鍵是,apache直接連線前端客戶端通訊元件與後端應用程式程序元件。如此一來,前端部分往往保持長時間的連線,常常達到幾分鐘,這導致後端部分將持續消耗記憶體和cpu資源。目前還沒有直接的方法能夠在大型系統中找到前後端服務的平衡,因此他們必須被分離開來。

目前有兩個主要的解決方法。第乙個方法,也是現有系統上最容易的方法,就是在apache前端安裝負載均衡伺服器或者nginx來處理客戶端連線部分。負載均衡伺服器,像 haproxy或者nginx能輕鬆處理成千上萬條併發的連線,並使apache能夠真正的僅作為後端應用程式工作,來處理32個或是更多的程序。

第二種方案,也是最通用的辦法就是用nginx替換apache,同時使用php-pfm作為應用伺服器。就像之前所提到的,這將分割前端客戶端通訊部分和後端應用程式部分。nginx處理http通訊協議,同時fpm處理後端應用程式部分,和那32個程序進行互動。

然而這幾種方法仍然還存在一些問題,主要是如何載入伺服器的rpc呼叫,以及如何釋放已經完成的rpc呼叫。 這兩個問題都會在後繼的部落格中加以詳解。

另外,只使用nginx的解決方法會給那些嚴重依賴於apache功能的應用程式帶來問題,尤其是特別依賴rewrite rules, .htaccess, 或者mod_security等一些可選元件的應用程式。在這種情況下,在apache前端增加安裝nginx是最好的方法。

通常來說,所有新的系統都應該使用nginx和php-fpm來部署。這能提供高效能增長特性,並且是平衡使用者和記憶體,cpu資源的最佳選擇。已存在的系統可以在前端使用nginx或者haproxy以達到同樣的效果,以便在當今現代網路環境中為使用者提供更優質的服務。

為什麼我們使用Nginx而不是Apache?

apache是非常強大的web伺服器,模組化結構,也是web服務端的鼻祖。世界上大多數 仍執行著apache系統。但是,apache並不是完美的,並且不再適合大規模系統。為什麼?因為他的程序模式雖然簡單而靈活,但並不適合大規模尤其是當要處理像php這種需要占用大量記憶體應用程式 時。我們大多數的客戶...

為什麼我們使用Nginx而不是Apache?

我們大多數的客戶在他們的伺服器上使用apache作為web伺服器,尤其是部署在乙個基於php系統的前端並且使用mod php。鑑於擴張性和效能方面的原因,我們通常會建議他們改用nginx和fpm。apache是非常強大的web伺服器,模組化結構,也是web服務端的鼻祖。除了 一些其他的工具外,apa...

我們為什麼而工作?

hp大中華區總裁孫振耀退休感 我宣布退休後,接到同事朋友同學的祝賀。大部分人都認為我能夠在這樣的職位上及年齡選擇退休,是一種勇氣,也是一種福氣。還有一部分人懷疑我只是藉此機會換個工作,當然還有一些人說我在hp做不下去了,趁此機會離開。我多年來已經習慣別人對我的說三道四,但對於好友,我還是挺關心大家是...