比較 Nginx 和 Apache (並學習如何選擇)

任何一種 Nginx的 Apache 是具有豐富功能集和高性能的成熟產品。 它們共享共同的開源來源,您可以將它們部署在 Windows 或 Linux 服務器。 

但是,一些關鍵差異可能會讓您選擇其中一個。

例如, Apache 是一個全面的解決方案,開箱即用地支持許多不同的技術和模塊。 相比之下,Nginx 依賴第三方模塊來擴展其功能。

看看哪個 Web服務器 可能更適合您的需求,讓我們更深入地研究這些選項。

Apache – 原始英雄網絡服務器

Apache

創建於 1995 年 羅伯特·麥庫爾 最初稱為“Apache HTTP 服務器項目”(因此得名), Apache 旨在創建一個強大的商業級服務器,即使進行修改也可以免費使用。 它迅速流行起來,因為它可以在許多不同的操作系統上運行,從 Unix 到 Windows。

由於這種長期流行,我認為 Apache 作為“原始英雄”網絡服務器。 它是健壯的、有據可查的,並在 Apache 軟件基金會。

Nginx——新時代的泰坦

Nginx的

Nginx(發音為“Engine X”)是 HTTP 和反向代理服務器、郵件代理服務器和通用 TCP/UDP 代理服務器,用於託管各種規模的網站和應用程序。 它首先由俄羅斯開發商公開發布 Igor Sysoev. Nginx 最初的目標是解決 C10K 問題 Apache 努力管理。 

另請閱讀

Nginx 對比 Apache – 顯著差異

建築

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 請求中的請求更加密集,因為操作系統必須為每個請求生成一個全新的解釋器。

如何在 Nginx 和 Apache

如您所見,這些 Web 服務器龐然大物之間沒有明顯的贏家。 這主要取決於您需要網絡服務器來管理什麼。 

選擇 Apache 如果: 

  • 您正在運行一個中/大型網站,該網站可能會隨著時間的推移而顯著增長,並且需要自定義模塊。
  • 您在服務器中啟用了許多虛擬主機或模塊,並且在啟動時需要它們。
  • 您正在運行一個小型網站,不想花時間學習如何正確配置 Nginx。

在以下情況下使用 Nginx:

  • 您正在運行一個大型網站,並希望同時輕鬆配置緩存和負載平衡,而不必擔心硬件限制。

關於 Nginx vs 的最終想法 Apache

無論你跑 Apache 或 Nginx 將取決於您的需求和您正在運行的硬件。 您可以使用任一選項進行服務 PHP 網站。 但除此之外,還有很多事情需要考慮。 

如果您有一個簡單的網站,您可能不會注意到它們之間的任何區別。 但是,如果您的網站獲得更多流量並增長,您將需要了解每台服務器在負載下的性能和擴展情況。

另請閱讀

作者照片

文章 Timothy Shim