Nginx 與 Apache:哪個是最好的 Web 伺服器?

儘管有許多不同類型的伺服器軟體,但您通常會將競爭者歸結為 Nginx 與 Apache。這是因為兩者都為許多不同的伺服器配置提供了最佳性能,並且比另一個更適合某些應用程序。

即便如此,您仍然需要考慮其中哪一個更適合您的需求。有幾個不同的類別需要研究,例如操作系統 (OS) 支持、安全性、文檔和(當然)性能。

在這篇文章中,我們將在許多不同的領域比較 Nginx 與 Apache。最後,我們將總結我們的發現,並為您提供選擇正確選項所需的信息。

介紹 Nginx 和 Apache

在我們深入了解每種伺服器類型的詳細信息之前,讓我們先簡要介紹一下 Nginx 和 Apache。一旦我們進入下一部分,您將了解兩者的一些用例,以及您可能在何處看到它們「在野外」。

#Nginx 與 #Apache:哪一個是適合您的 Web 伺服器?👨‍💻

點擊推文

 

nginx

nginx-logo

與 Apache 相比,Nginx(發音為「engine X」)是伺服器端技術領域的新手。然而,開發團隊承擔了擴展 Apache 系統局限性的任務。

這是一個開源解決方案,許多用戶考慮其穩定性和可擴展性。這(部分)歸結於它的事件驅動架構——稍後會詳細介紹。事實上,最初的 Nginx 版本的部分目標是能夠同時處理 10,000 個連接由於當時的網路迅速擴展,這在 2004 年是必要的。

總體而言,系統管理員和站點所有者喜歡 Nginx,因為它具有高性能、適用於靜態文件並執行負載均衡器和「反向代理」的功能。這些都與正常運行時間、速度和安全性相關。

阿帕奇

apache-logo

Apache在某種程度上是 Web 伺服器技術的「老人」。它幾乎與 Web 本身一樣古老——從 1995 年起,Apache 就一直是數千(如果不是數百萬)伺服器的核心軟體。

長期以來,Apache 一直是「系統管理員」中的主導技術。造成這種情況的原因有很多——一些與性能有關,另一些則是習慣的力量。無論如何,Apache 伺服器在配置很重要的地方有很多用途。

您會發現 Apache 作為所有Linux 發行版上的預裝軟體,因此它是該操作系統的首選解決方案。然而,雖然它使用與 Nginx 不同的架構,但它仍然提供強大的功能、可擴展性和出色的文檔。

許多系統管理員也喜歡 Apache 的可定製特性,以及如何通過載入各種模塊來製作自己的伺服器。

Nginx 與 Apache 的一般用例

可以說 Apache 在服務網站方面是「萬事通」。然而,這是喜憂參半。是的,Apache 伺服器幾乎可以做 Nginx 可以做的所有事情,但代價是代碼性能較低。年齡是這裡的一個因素。

由於 Apache 在我們擁有一些更高級的 Web 伺服器應用程序之前出現,因此代碼庫無法滿足現代網站的需求。雖然這些問題現在不一定值得關注,但 Nginx 之類的解決方案適用於現代網路。

因此,您會發現 Apache 作為一種易於配置的伺服器,適用於共享託管等應用程序,非常棒。它的集成還將其用作本地開發伺服器軟體,作為 Linux、Apache、MySQLPHP (LAMP) 堆棧的一部分。

燈組

相比之下,Nginx 擁有更成熟的軟體基礎,​​相比 Apache,其精簡程度更高。在穩定性和安全性是關鍵、基本要素的地方很好。您會發現 Nginx 伺服器不像其他類型那樣可配置,這意味著您將更少地訪問它的核心。

更重要的是,它不像 Apache 那樣是模塊化的,這使得它不太適合需要進行伺服器定製的情況。

Nginx 與 Apache:每種伺服器類型的流行程度

很長一段時間,伺服器軟體就像一場單馬比賽。Apache 作為主導力量運行了多年,並且仍然佔有巨大的市場份額。因此,您會發現有很多對 Apache 伺服器的集成和支持,以及一流的文檔。

這是選擇 Apache 的進一步理由,並有助於其繼續使用。然而,Nginx 是一個擁有巨大市場份額伺服器軟體隨著時間的推移,Nginx 的使用率在緩慢上升,以至於它現在是市場上最主要的 Web 伺服器技術,儘管不是很多。

展望未來,我們建議 Apache 的使用會隨著時間的推移而減少,因為 Nginx 提供了很多系統管理員在 Web 伺服器中需要的東西。然而,LiteSpeed Web ServerCloudflare Server即將出現,並且擁有不斷增長的用戶群和強大的支持。幾年後,這種比較可以將 Nginx 與這些年輕的新貴之一進行比較。

Nginx 與 Apache:特性和功能的技術分解

接下來的幾節將涵蓋 Nginx 與 Apache 的許多技術方面。雖然我們無法涵蓋所有​​內容,但我們會給主要領域留出充足的時間。無論如何,因為這些代表了兩種伺服器類型的核心元素,所以在為您選擇合適的軟體時,您將有足夠的工作要做。

1.連接和請求處理

了解伺服器如何處理連接至關重要,因為這是它的「核心貨幣」。這是有爭議的,但是當人們希望討論 Nginx 與 Apache 的相對優點時,連接處理在看法中起著重要作用。

nginx

Nginx 是「非同步的」和「事件驅動的」,這意味著它可以一次處理多個請求,並在有可用資源的情況下處理它們。它產生「工作進程」來處理傳入的連接,它預計一次有數千個。這些是伺服器其餘部分的「水載體」。

例如,每個工作進程都會監聽進程事件和連接,並將它們添加到一個連續循環中。從那裡,伺服器可以處理每個事件並在完成時將其刪除。Nginx 伺服器的流提供了固有的可擴展性,非同步、非阻塞架構也提供了這一點。

阿帕奇

相比之下,Apache 通過多個多處理模塊 (MPM)一次處理一個事件系統管理員將選擇最適合該任務的連接架構,其中有幾個。

mpm_prefork 模塊是一個常見的模塊。這會為每個事件產生子進程,並且一次只處理一個連接。如果進程數高於請求數,您將很難區分 Nginx 與 Apache 在性能方面的區別。

但是,這種情況很少見,Apache 伺服器在很多情況下會看到比進程更多的請求。更重要的是,由於內存使用,這個 MPM 不能很好地擴展。

對於那些使用 PHP 的人來說, mpm_prefork 是使用mod_php 解釋器模塊的唯一安全方式儘管有這些缺點,但這將是 WordPress 開發人員在必須部署到 Apache 伺服器時會選擇的 MPM。

您還將看到 mpm_worker 和 mpm_event 模塊。由於它們可以為每個線程集合生成多個進程,因此它們執行類似的操作並更好地擴展。

這批 MPM 展示了 Apache 的靈活性,儘管在某些情況下性能存在缺陷。

靜態和動態內容的請求處理

在我們繼續之前,我們應該提到每個伺服器軟體的靜態和動態內容。您將了解到 Nginx 無法處理動態內容,這可能會讓您感到擔憂。事實上,Nginx 不會以原生方式處理此類內容。相反,它會將其發送到外部處理器(例如緩存),然後在移動內容之前等待它返回。

對於開發,系統管理員將為此設置一個解決方案,例如 Memcached這種方法有負面影響,即性能。然而,鏈的每個部分的性能開銷的好處否定了這一點。Nginx 不必擔心處理這些請求,因此它可以更高效地專註於其職責範圍。

Apache 的 MPM 系統允許它在不需要其他模塊的情況下處理靜態和動態內容。對於動態內容,Apache 將語言處理器嵌入到每個工作線程中。這是一種很有效的簡單方法。如果需要進行更改,您還可以更換模塊。

2. 配置伺服器

Nginx 與 Apache 之間更明顯的區別之一是您如何配置每個伺服器。Nginx 使用集中式方法,這意味著用戶無法在一個主文件之外配置伺服器。雖然這似乎是負面的,但它有很多優點:

  • 伺服器管理員負責全局安全,從整體上加強對伺服器的訪問。
  • 集中式伺服器比其他類型的伺服器具有更高的性能。這是因為 Nginx 不需要處理檢查每個目錄中的配置文件的請求。
  • 這裡有一個連鎖反應,因為不會有來自多個區域的伺服器的任何覆蓋,進一步減少請求時間。

外行知道他們使用 Apache 伺服器的一種方式是.htaccess 文件存在這些是您幾乎可以在伺服器上的任何位置添加的配置文件。Apache 將在發出請求時檢查 .htaccess 文件路徑的每個元素。

訪問

這對於想要個性化他們的伺服器部分但如果其中一個指令導致性能或安全問題可能會導致災難的用戶來說非常棒。這種分散的方法是您將看到 Apache 用於共享主機的原因之一。這也是 WordPress 等內容管理系統 (CMS) 在 Apache 伺服器上提供良好性能的原因。

3. 請求解釋

Nginx 與 Apache 的一個主要區別似乎並不明顯的是它如何解釋請求。簡而言之:

  • Nginx 使用統一資源標識符 (URI) 為每個組件解釋和映射請求。
  • Apache 也可以使用 URI 來解釋請求,但更常見的是看到基於文件的路徑結構。

因為 Apache 首先是一個 Web 伺服器,它將使用 <Directory>、<Files> 或 <Location> 塊來定義資源。這裡的關鍵概念是 Apache「看到」的一切都與 Web 伺服器相關,因此資源路徑中沒有歧義。想想文檔樹,這就是 Apache ‘可視化’伺服器文件系統的方式。

apache-伺服器-配置

相比之下,Nginx 有很多用例,例如負載均衡器、代理伺服器和 Web 伺服器。因此,請求需要作為 Nginx 的 URI 來處理它們。例如,Nginx 使用伺服器和位置塊:前者解釋請求的主機,後者隨後匹配 URI 部分。整個請求變成了一個 URI。

nginx-伺服器-配置

總的來說,URI 對 Nginx 來說更靈活,因為它可以適應它執行的任何功能。即便如此,Apache 的系統還是可以工作的,因為它只需要扮演 Web 伺服器的角色。

Nginx vs Apache:2021 年你應該為你的伺服器選擇哪一個

我應該選擇哪種伺服器軟體?很簡單:這是您的託管服務提供商提供的任何一種在很多情況下,您將沒有選擇。我們注意到,如果您想在 Nginx 與 Apache 之間做出決定,許多 Web 主機都遵循您應該匹配的相同模式:

  • 如果您想運行需要持續配置的伺服器,或者您想為用戶提供配置選擇,Apache 將滿足您的需求。
  • 但是,如果您想提供超強的性能、堅如磐石的安全性,並且想要處理配置而不是您的用戶,那麼 Nginx 是前進的方向。

在性能方面,Apache由於其固有的架構可以佔用更多內存。Nginx 在高流量情況下會更好,尤其是當它必須處理大量靜態內容時。

因此,如果您依靠緩存來存儲和提供內容,Nginx 可能是最佳選擇。但是,請記住,Nginx 無法提供動態內容,因此根據伺服器使用的代理的效率,您將承受更多的性能損失。

結論

WordPress(以及運行網站)的許多領域提供了幾乎壓倒性的選擇。這就是野獸的本性。但是,當您需要讓您的網站快速上線時,它無濟於事。

您選擇的伺服器類型是一項至關重要的一線決定,您需要格外小心。Nginx 與 Apache 是一個常見的比較,因為兩者在某些情況下都有好處。

我們的觀點是 Nginx 可以以更高的性能覆蓋最多的基礎,這使其成為大多數 WordPress 用戶的更好選擇。這就是為什麼許多流行的以性能為中心的 WordPress 主機已經轉向全 Nginx 伺服器堆棧,包括KinstaFlywheel

無論如何,如果您沒有選擇,您可以安全地使用主機提供的任何內容,並且大多數 WordPress 站點都可以使用任一 Web 伺服器完全正常。

Nginx 與 Apache 之間的界限在哪裡?在下面的評論部分讓我們知道!

相關文章