任何一種 Nginx的 以及 Apache 是具有豐富功能和高效能的成熟產品。它們具有共同的開源起源,您可以在 Windows 或 Linux 伺服器上部署它們。
然而,一些關鍵的差異可能會讓您選擇其中一個。
例如, Apache 是一個全面的解決方案,支援許多不同的開箱即用的技術和模組。相較之下,Nginx 依賴第三方模組來擴展其功能。
為了了解哪個 Web 伺服器可能更適合您的需求,讓我們深入了解這些選項。
概覽
Apache,原始英雄 Web 伺服器
創建於 1995 年 羅伯特·麥庫爾 最初被稱為“Apache HTTP 伺服器專案」(因此得名), Apache 旨在創建一個強大的商業級伺服器,即使經過修改也可以免費使用。它很快就流行起來,因為它可以在從 Unix 到 Windows 的許多不同的作業系統上運行。
由於這種長期的流行,我認為 Apache 作為“原始英雄”網頁伺服器。它功能強大,文檔齊全,並由一個由 Apache 軟體基金會。
Nginx,新時代的巨人
Nginx(發音為「Engine X」)是一個 HTTP 和反向代理伺服器、郵件代理伺服器以及通用 TCP/UDP 代理伺服器,用於託管各種規模的網站和應用程式。它首先由俄羅斯開發商公開發布 伊戈爾·瑟索耶夫。 Nginx 最初的目標是解決 C10K 問題 Apache 努力管理。
2019 年,Nginx 成為 F5 Networks 的一部分。 F5 是一家專注於應用程式安全、多雲管理和線上詐欺防制的科技公司。
市場佔有率和特點
市場占有率
主要差異
| 產品特性 | Nginx的 | Apache |
|---|---|---|
| 介紹 | 2004 | 1995 |
| 目前穩定版本 | nginx 1.27.0 | Apache 2.4.63 |
| 卓越的建築 | 事件驅動 | 流程驅動 |
| 開源 | 可以 | 可以 |
| 開發與支援 | Apache 粉底遮瑕 | F5網絡 |
| 支持平台 | 主要基於 Unix | Unix和Windows |
| 多個並發請求 | 可以 | 沒有 |
| 本機動態內容處理 | 沒有 | 可以 |
| 模塊化 | 可以 | 可以 |
| 型號 | 有限 | 每個目錄透過 .htaccess |
| 請求口譯 | 傳遞 URI | 傳遞檔案系統位置 |
核心架構
Nginx 和 Apache 它們的核心架構有一些相似之處。例如,它們都使用主從進程來提高效能。它們甚至有類似的設定檔。然而,建築風格的差異導致了廣泛的性能差異。
Nginx 具有資源友善的事件驅動架構,在負載下使用少量但恆定的記憶體。此特性使其非常適合託管流量高或流量間歇性激增的網站。
Apache的流程驅動架構透過專用執行緒處理每個連接,這需要更多的記憶體。但是,在具有更多 CPU 核心和 RAM 的機器上,它在高負載下可以更好地擴展。
內存使用情況
Nginx 以其高效能和低資源消耗而聞名。另一方面, Apache 可能會佔用大量內存,尤其是在運行多個伺服器區塊時。雖然兩者都使用記憶體來處理 HTTP 請求,但 Nginx 更輕量級。
設計 Apache 意味著它每個連接都會產生一個線程,並且每個線程都會使用一定數量的 RAM。隨著流量的增加,這可能會導致問題,因為需要更多的 RAM,特別是在記憶體較少的伺服器上。 Apache 也會為每個請求建立新的進程,即使來自同一個使用者。
相較之下,Nginx 使用一個行程同時處理多個連線。
PHP 基礎操作
因為這兩台 Web 伺服器主要與 PHP,他們如何處理程式碼意味著巨大的性能潛力。 Nginx 不執行 PHP 直接預設。相反,它將請求傳遞給 PHP-FPM(FastCGI流程管理器),它處理請求並將回應傳回 Nginx,然後 Nginx 將內容傳回給客戶端。
由於 Nginx 不會等待來自 PHP-FPM 來處理另一個請求(類似於它在提供靜態內容時不等待客戶端的回應),Nginx 可以同時處理比 Apache 將能夠管理。
Apache 使用名為 mod_php 的模組來執行 PHP 代碼。在這個模型中,每次 HTTP 請求進來時, Apache 產生一個新進程或執行緒(取決於它的配置方式)來處理該請求。此過程還負責處理任何 PHP 該請求中的請求。
這種模式是可行的,但也存在一些缺點。首先,為每個請求產生一個新程序可能會對系統造成很大的負擔,特別是當有許多同時發生的請求時。為每個 PHP 請求中的請求更加密集,因為作業系統必須為每個請求產生一個全新的解釋器。
性能基準
在 CyberPanel 的詳細性能基準報告,幾個關鍵測試突出了 Nginx 和 Apache。觀看以下影片以了解完整的測試過程。
總結:
- Nginx的:以較低的記憶體佔用處理多達 10,000 個並發連線。在基準測試中,它提供靜態內容的速度比 Apache.
- Apache: 相比之下, Apache 對於靜態內容來說,它很有效,但效率不如 Nginx。憑藉其流程驅動的架構, Apache由於管理多個進程的開銷,在高並發性下的效能可能會下降。
Nginx 對比 Apache 對於 WordPress
在上下文中 WordPress 在效能方面,Nginx 顯著提高了載入時間,特別是對於靜態內容,使其成為高流量的首選 WordPress 站點。其事件驅動架構可以有效處理並發連接,從而縮短回應時間並減少伺服器負載。
Apache另一方面,它透過以下模組提供強大的動態內容處理 mod_php,這可以簡化部署 WordPress 嚴重依賴動態內容的網站。然而,Nginx 通常能提供更好的效能和資源效率 WordPress 專注於靜態內容交付的環境。
如何在 Nginx 和 Apache
如您所見,這些網頁伺服器巨頭之間沒有明顯的贏家。這主要取決於您需要網頁伺服器管理什麼。
選擇 Apache 如果:
- 遺留系統和相容性: Apache 由於其在市場上長期存在,因此通常是長期使用它的系統的首選。如果您的基礎設施嚴重依賴 .htaccess 每個目錄的配置文件, Apache 更為合適,因為它本身支援這些文件,允許在共享託管環境中進行分散配置和靈活性。
- 動態內容處理:如果您的應用程式需要大量處理動態內容,例如 PHP、Python 或 Ruby 腳本, Apache 由於其能夠將處理器直接嵌入其模組中,因此具有優勢。此設定簡化了伺服器內直接執行動態腳本的過程。
- 易於使用和文檔: Apache的廣泛採用意味著它擁有大量的文檔和社群支援。更容易找到指南、教學和支持 Apache相關問題,使其成為初學者或喜歡大型知識庫的人更友善的選擇。
以下情況請使用 Nginx:
- 高性能和 Scala吳春明:Nginx 針對處理大量並發連線進行了最佳化,使其成為需要可擴展性的高流量網站或應用程式的理想選擇。它的事件驅動架構使其能夠以較低的記憶體使用率處理許多連接,從而有效率地進行靜態內容傳遞。
- 負載平衡和反向代理:Nginx 通常用作反向代理和負載平衡器,在多個後端伺服器之間分配傳入流量。此功能使 Nginx 成為高可用性設定和需要高效負載分配的環境的絕佳選擇。
- 靜態內容交付:如果您的應用程式提供大量靜態內容,例如圖像、CSS 或 Java腳本文件,Nginx 因其直接提供靜態文件的速度和效率而表現出色。它的架構允許以最小的開銷快速交付靜態資源。
- 配置簡單:雖然 Nginx 不支持 .htaccess 文件,其配置語法簡單易懂。對於想要保持乾淨、簡單的伺服器配置的人來說,這種簡單性是有益的。
聯合使用
對於許多設置,同時使用 Apache 和 Nginx 結合起來可以發揮各自的優勢。
一個常見的設定是將 Nginx 作為反向代理放在 Apache。這使得 Nginx 能夠有效率地處理靜態內容和並發連接,同時 Apache 管理動態內容處理。這種混合方法可以優化複雜的網路環境中的效能和資源利用率。
最後的思考
無論你跑步 Apache 或 Nginx 將取決於您的需求和您正在運行的硬體。您可以使用任一選項來提供服務 PHP 網站。但需要考慮的遠不止這些。
如果您的網站很簡單,您可能不會注意到它們之間的任何差異。但是,如果您的網站流量增加並且規模擴大,您將需要了解每台伺服器在負載下的效能和擴展。