Apache vs Nginx 服務器:這兩種服務器類型的內幕
已發表: 2022-01-03互聯網在一組服務器上運行。 但是,它們的設置與標準台式機不同。 精明的系統管理員或後端開發人員會根據他們的需求優化此選擇。 執行此操作的主要方法是選擇服務器軟件。 該領域的一個流行比較是 Apache 與 Nginx。
這是出於多種原因,但使用次數和壽命是兩個主要因素。 Nginx 更新,可以說更適合現代 Web 標準。 然而,Apache 也沒有採取任何措施,並且同樣能夠為全球數百萬用戶提供網站服務。
在這篇文章中,我們將為您提供 Apache 與 Nginx 的比較。 我們將研究表面元素,例如兩種服務器類型的流行程度。 但是,我們還將深入研究每種技術的技術特性和注意事項。 最後,您將了解這兩種軟件類型的來龍去脈,以及哪一種最適合您的服務器。
Apache 和 Nginx 是什麼
閱讀本文意味著您可能了解 Web 服務器需要專業軟件才能提供最佳性能。 雖然這篇文章不會涵蓋一般意義上的服務器軟件是什麼或做什麼,但我們將介紹適用於您的服務器的兩個領先解決方案:
- 阿帕奇。 這是大多數 Linux“發行版”預裝的免費開源軟件。 它自 1995 年以來一直存在,並且由於這兩個因素,在市場上具有近乎領先的地位。
- Nginx。 雖然與其他服務器軟件相比它是一個相對的嬰兒,但 Nginx 有很多用戶。 在目前的寫作中,它幾乎與 Apache 並駕齊驅,成為最流行的服務器軟件(稍後會詳細介紹)。
值得注意的是,Apache 幾十年來一直領先於服務器軟件,並且在那個時候已經看到了很大的市場份額。 然而,Nginx 現在是領跑者,儘管差距不大。

說明:來自 google Trends 的藍線代表自 2004 年以來對 Apache 的搜索,而紅線與 Nginx 相關。
至於 Apache 和 Nginx 帶來了什麼,這可能會寫滿幾本書。 但是,我們將嘗試在 2,000 字以內做到這一點——從兩者的一般功能集開始。
Apache 和 Nginx 的一般特性
因為 Apache 和 Nginx 都是 HTTP Web 服務器軟件,所以你會發現很多相似之處。 例如,它們都是開源的,這意味著它們可以在各種系統上工作。 通過擴展,兩者都是靈活和可擴展的,但每種服務器類型都有不同的目標。
然而,Apache 與 Nginx 並不是真正的比較,因為這兩種軟件都以不同的方式處理配置 Web 服務器的過程。 實際上,兩者都將更適合不同的應用程序。
在本文的其餘部分,我們將通過分解 Apache 和 Nginx 的技術細節向您展示這一點。 以下是我們將要介紹的內容:
- 每種服務器軟件類型的技術細分,包括請求和連接處理、緩存技術等。
- 配置和擴展 Apache,包括其
.htaccess
文件和模塊的詳細信息。 - 你如何配置 Nginx,以及它的可擴展性。
這似乎不需要考慮太多,但您可以將每個部分解壓縮為許多其他子部分。 我們將這樣做,從技術差異開始。
Apache 和 Nginx 之間的技術差異
一般而言,Apache 和 Nginx 採用幾乎獨特且排他的路徑來實現最佳 Web 服務器的相同目標。 如果你從廣義上比較每一個,你會發現它們有多麼不同:
- Apache 使用“流程驅動”架構,而 Nginx 使用“事件驅動”架構。
- 雖然這兩種類型都服務器靜態文件(儘管方式不同),但 Nginx 不服務器動態內容。
- 每種軟件類型以不同的核心方式解釋 HTTP 請求。
我們將從連接處理注意事項開始研究其中的一些方面。
連接處理
您會發現 Apache 與 Nginx 非常重視每種類型如何處理連接和請求。 例如,Apache 使用流程驅動的方法,它將使用名為mpm_prefork
的處理模塊為每個線程創建一個新請求。 如果請求的數量少於進程的數量,這可能會很快,但在此之後會降低性能。
事實上,Apache 使用mpm_prefork
、 mpm_worker
和mpm_event
模塊創建連接處理算法以滿足您的需求提供了很大的靈活性。 相比之下,Nginx 的設計試圖減輕 Apache 的負面性能方面。
它通過在事件驅動的基礎上產生工作進程的方式來做到這一點。 這意味著 Nginx 非常適合擴展,因為它可以在單個線程中管理多個請求。
請求口譯
Apache 和 Nginx 也採用不同的方法來解釋服務器將接收到的請求。 例如,Nginx 使用請求的統一資源標識符 (URI) 將其轉換為文件系統的物理元素。
您可以在某些配置塊的格式中看到這一點,例如server
和location
。 它們一起工作以解析 URI 並將其轉換為文件系統中的內容。
server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
相比之下,Apache 作為“純”網絡服務器軟件的根源意味著它假定每個請求都是文件系統中的資源並在此基礎上採取行動。 但是,Apache 也可以使用請求更抽象的 URI。 儘管如此,文檔還是警告不要使用基於文件的方法以外的任何方法。
靜態與動態性能
在性能方面,Apache 與 Nginx 是幾乎每個用戶的重要考慮因素。 在上下文中,比較歸結為每種軟件類型如何提供靜態和動態內容。

因為 Apache 的固有架構直接與文件系統一起工作,所以它非常適合提供靜態內容。 但是,它還將處理服務器內的動態內容,這是一個類似的實現,如果您需要根據您的要求換出模塊,它也很靈活。
相比之下,Nginx 根本不處理任何動態內容。 它更複雜,因為 Nginx 必須將這些請求傳遞給外部工作人員或協議。 即便如此,您會發現性能開銷更少,並且 Nginx 可以利用其他具有更大適應性的協議。
對於靜態內容,這可以像 Apache 一樣簡單,並且在某些情況下是性能更好的選擇。 這是因為 Nginx 可以在需要時聯繫解釋器,而不是它是服務器軟件整體性能的固有部分。
Apache 的分佈式配置模型
毫不奇怪,Apache 和 Nginx 都有不同的服務器配置方法。 簡而言之,Apache vs Nginx 的配置取決於您是否可以在目錄級別這樣做。
Apache 使用分佈式模型,這意味著您可以基於每個目錄配置服務器。 您將通過.htaccess
文件執行此操作。 Apache 將檢查所請求文件路徑的每個組件是否有.htaccess
文件,並執行其中的指令。

在我們看來, .htaccess
文件比任何其他系統都靈活得多。 它可以快速查找、打開和編輯。 觸手可及執行許多強大動作的力量是巨大的。 您還會發現,只要 Apache 服務器發現一個.htaccess
文件,它就會處理它,而無需重新加載服務器。
如果您需要讓某些用戶在影響整個服務器配置的情況下控制其站點的各個方面,這也太棒了。 這就是為什麼 Apache 服務器及其靈活的模塊系統成為共享託管平台的支柱。
阿帕奇的模塊
您可以使用 Apache 動態加載和卸載模塊。 這類似於在 WordPress 中使用插件和主題:核心 Apache 功能執行基本步驟,而活動模塊幫助您創建獨特的體驗。
這些模塊可以覆蓋很多領域,並且有很多可用的。 mod_php
等模塊可以改變服務器的核心功能,而流行的mod_rewrite
可以讓您執行許多其他任務:
- 限制 IP 地址。
- 更改站點的主文件夾。
- 執行 301 重定向。
- 設置默認主頁。
在.htaccess
和動態模塊系統之間,Apache 為大多數用戶提供了一種清晰的方式來修補和優化 Web 服務器和站點。
Nginx 的集中配置模型
Nginx 對服務器配置採取集中式方法。 這意味著只有一個配置文件(以.conf
擴展名結尾)。 根據您的服務器結構,有時很難找到。
對於想要更改服務器的新站點所有者來說,這有一些明顯的缺點。 對於共享主機上的站點,幾乎不可能配置服務器。 靈活性也小得多。
但是,也有一些基於性能的優勢。 因為 Nginx 的配置文件只有一個位置,而 Apache 可能會使用多個位置,所以只有一個查找。 通過擴展,定位該配置文件的性能影響也較小。
您還會發現,由於配置是中心化的,因此站點所有者將沒有責任管理與安全相關的方面。 這是 Nginx 方法的另一個好處,因為安全責任僅落在系統管理員的肩上。
Nginx 的模塊
公平地說,儘管 Nginx 的模塊系統提供了相同的功能,但它遠不如 Apache 那樣寬鬆或靈活。 以 Nginx 的重定向規則為例:
server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }
這是因為您無法使用 Nginx 將它們作為動態元素加載。 回到我們的 WordPress 類比,這就像必須重新安裝整個站點才能停用插件。
從表面上看,這似乎行不通,而且似乎是一個巨大的損害。 然而,你缺乏靈活性,你會獲得核心穩定性和功能。 如果您知道服務器在構建時需要什麼,則可以包含所有這些組件和模塊。
還有一個安全方面需要考慮。 因為您不會在系統內外交換動態模塊,所以您會知道每個元素可以做什麼和可以做什麼。 它使您的服務器的結構和體系結構清晰且易於維護,並且性能更高。
為什麼要使用 Apache 或 Nginx
綜上所述,Apache vs Nginx 並不是一個明確的決定。 首先,關於 Nginx 比 Apache 表現更好的典型觀點具有誤導性。 如果你設置好 Apache 服務器,它的性能與等效的 Nginx 服務器一樣。
Apache 非常適合以簡單的方式提供靜態和動態內容。 它為那些剛開始管理服務器的人提供了強大的功能,配置靈活性。 一般來說,與 Nginx 相比,配置 Apache 服務器所需的技術知識更少。
然而,性能是 Nginx 的亮點。 其體系結構的設置確保它可以在每個處理器週期內實現比 Apache 服務器更多的性能。 儘管設置的靈活性較低。
在某些情況下,您可能無法選擇 Apache 還是 Nginx,尤其是在您使用共享主機的情況下。 但是,如果您這樣做,選擇將取決於您的專業知識、目標和需求。
概括
您對服務器軟件的選擇很重要,您可以使用無數種選擇。 實際上,您不會從左側字段中選擇服務器類型。 相反,您通常會從兩種或三種類型中進行選擇。 Apache 與 Nginx 是一個經常被考慮的比較,因為兩者都提供了出色的長期性能和可靠性。
本文研究了 Apache 與 Nginx 在這兩個方面以及更多方面的比較。 有很多技術因素需要考慮,這將比特定服務器軟件在社區中的受歡迎程度更能影響您的選擇。
你對 Apache 和 Nginx 有什麼看法嗎? 在下面的評論部分與我們分享您的想法!