服務器端對決:Apache vs NGINX

已發表: 2020-10-01

Web 服務器是 Internet 的核心。 如果沒有 Apache 和 NGINX 等網絡服務器軟件,網絡將不會像我們今天看到的那樣。 但是,它們不可互換。 要知道這兩個選項中的哪一個(Apache 與 NGINX)最適合您,您需要了解它們的工作原理。

在本文中,我們將討論什麼是 Web 服務器及其工作原理,並介紹 Apache 和 NGINX。 然後,我們將在關鍵差異方面比較 Apache 與 NGINX,並討論它們的優缺點。

讓我們開始吧!

什麼是 Web 服務器?

簡而言之,Web 服務器是專門用於運行 Apache 或 NGINX 等服務器軟件的計算機。 Web 服務器既存儲站點文件,又可以處理傳入請求以訪問它們。

負責最後一項任務的是 Web 服務器軟件,這是一項重要的職責。 對於流行的網站,您使用的軟件可能需要在很短的時間內處理大量請求,因此它必須能夠勝任這項任務。 NGINX 和 Apache 都能夠擴展和處理大量請求。 但是,兩個服務器選項的工作方式在核心級別上是不同的。

Web 服務器軟件與其他幾個組件一起工作,為現代網站和應用程序提供服務。 例如,要在服務器上設置 WordPress,您需要以下組件:

  • 支持 HTTPS 的 Web 服務器:這可以是 Apache、NGINX 或其他一些選項。
  • PHP: WordPress 建立在 PHP 語言之上,因此您需要它來運行內容管理系統 (CMS)。
  • 數據庫軟件:可以是 MySQL 或 MariaDB。

在本文中,我們將只關注 Web 服務器軟件。 但是,重要的是要了解軟件不是憑空運行的。 在某些情況下,你甚至可以配置Web服務器,如Apache和NGINX的共同努力。 網站可以做到這一點的一種方法是配置 NGINX 作為反向代理,同時使用 Apache 作為主要服務器軟件。 您可以使用的應用程序顯然多種多樣且豐富。

Apache 簡介

Apache 主頁。

長期以來,Apache 是大多數站點的默認 Web 服務器選項。 該軟件自 1995 年 Robert McCool 推出 Apache HTTP Server 以來一直存在。 幾年後,Apache 軟件基金會接管了維護工作,Apache 成為開源軟件。

Apache 獲得了極大的歡迎,因為它與幾個主要的 Linux 發行版一起安裝。 當談到 Web 服務器時,Linux 的流行使 Apache 多年來成為事實上的選擇。

Apache 名稱在 Linux 中根深蒂固,以至於操作系統 (OS) 將httpd命令用於其服務器進程(在 Apache 本身中可以找到)。 然而,當談到 Web 服務器時,Apache 並不是唯一的大牌。

NGINX 簡介

NGINX 主頁。

NGINX 由 Igor Sysoev 設計,能夠處理所謂的“C10K 問題”。 這涉及優化網絡以能夠處理多達 10K 的並發連接。 換句話說,NGINX 在創建時考慮到了最大的可擴展性。

該開源軟件於 2004 年發布,現在有兩種可用的許可證類型。 您擁有開源版本和 NGINX Plus,這是一個包含專業支持和其他功能的企業解決方案。

在早期,大多數網站使用 NGINX 僅處理靜態請求,因為它與 Apache 相比存在安裝難度。 不過,NGINX 的市場份額多年來一直在穩步增長。

根據一些調查,NGINX 已經超過 Apache,成為世界上最受歡迎的 Web 服務器軟件。 其他數字緊跟 Apache 的步伐:

有關 Web 服務器軟件流行度的統計數據。

圖片來源:W3Techs。

確實,在網絡上最受歡迎的網站中,NGINX 比 Apache 更受歡迎。 這是因為 NGINX 在可擴展性方面具有不可否認的優勢,這對於獲得大量流量的站點來說至關重要。

此外,如果您不想將其用作 Web 服務器,NGINX 可以將“雙重任務”用作反向代理或負載平衡器。 換句話說,它可以完成比 Apache 多得多的角色。

但是,這並不是說如果您正在考慮更改服務器,NGINX 應該是您的默認選擇。 在接下來的幾節中,我們將分解每個軟件的獨特之處。

Apache 與 NGINX:3 個主要差異

在我們討論哪種服務器解決方案最適合您之前,我們需要分解它們的不同之處。 讓我們首先討論有關 Apache 與 NGINX 的請求處理。

1. 請求管理

請注意 - 這是事情變得更加技術化的地方。 Apache 使用它所謂的多處理模塊 (MPM) 來處理連接。 該軟件使您能夠在三種類型的 MPM 之間進行選擇:

  1. mpm-prefork該模塊創建單線程進程來處理每個請求。 反過來,每個“孩子”只能處理一個連接。
  2. mpm_worker該模塊可以啟動多線程進程,每個線程能夠管理一個連接。
  3. mpm_event在大多數情況下,此模塊的工作方式與mpm_worker相同,但經過優化以保持連接有效。

Apache 的一個獨特方面是它使您能夠選擇要使用的模塊,並根據需要交換它們。 默認情況下,Apache 使用mpm-prefork模塊,該模塊非常適合併發連接數較少的情況。 mpm_worker模塊在擴展方面更好,但它需要額外的服務器資源。

相比之下,NGINX 使用它所謂的“事件驅動”方法。 該軟件使用多線程進程,每個線程能夠處理多個連接。

更重要的是,NGINX 異步處理傳入的請求。 簡而言之,這意味著 NGINX 可以用更少的服務器資源管理更多的請求,從而使其在這方面的效率更高。

2. 服務器配置

Apache 使用.htaccess文件來設置它如何處理傳入請求的特定規則。 這些文件包括從重定向規則到內存限制等所有內容。

使用 Apache,您可以為服務器樹中的每個目錄設置單獨的.htaccess文件。 舉個例子,如果你設置了一個共享服務器,你可以讓每個託管在它上面的網站設置自己的.htaccess文件。

這種高度靈活性的缺點是,您在請求路徑中遇到的每個.htaccess文件都需要單獨解釋。 這意味著請求可能需要更長的時間來執行。

在配置方面,NGINX 沒有為您提供相同級別的靈活性。 您擁有一個管理整個事物的主文件,而不是直接級別的配置文件。

3. 模塊

模塊是附加組件,您可以將它們與您選擇的服務器軟件一起使用以擴展其默認功能。 考慮到 Apache 的年齡和流行度,在模塊選擇方面它比 NGINX 具有優勢也就不足為奇了。

Apache 不僅提供更多模塊,而且更容易找到有關如何使用它們的文檔和教程。 此外,Apache 允許您隨意安裝、啟用和禁用模塊,為您提供高度的靈活性。

NGINX 沒有提供同樣的優勢。 要使用模塊,您需要將它們編譯成 NGINX 核心。 此外,一旦模塊被編譯,你就不能禁用它們,這使得交換選項變得更加困難。

需要注意的是,NGINX Plus 確實包含一個動態模塊功能,使您可以隨意禁用和啟用模塊。 但是,即使使用 Plus,您仍然需要使用 NGINX 核心編譯這些模塊,然後才能使用它們。

儘管 NGINX 的模塊庫和文檔在穩步增長,但在數量上仍然無法與 Apache 匹敵。 不過,考慮到 NGINX 如何不斷獲得更多市場份額,這可能會在不久的將來發生變化。

Apache 與 NGINX 的優缺點

到目前為止,您已經了解了 Apache 和 NGINX 之間的核心區別。 現在讓我們簡要介紹每種軟件的優缺點。

阿帕奇

首先,讓我們談談使用 Apache 的主要好處:

  • 設置和配置更容易
  • 借助 .htaccess文件,您可以更精細地控制服務器的配置
  • 模塊選擇更好,可以隨意啟用和禁用模塊
  • 您可以決定如何使用不同的模塊處理請求

使用 Apache 與 NGINX 的主要缺點是後者的擴展性更好。 如果您的網站仍處於成長階段,Apache 應該足以處理流量。

但是,在某些時候,如果您的站點變得非常成功,您可能需要考慮更新您的服務器堆棧。 這可能意味著切換到 NGINX 或將其用作 Apache Web 服務器的反向代理。

NGINX

NGINX 在 Apache 方面有兩個明顯的優勢——性能和可擴展性。 更具體地說,NGINX 在以下方面更好:

  • 處理大量並發請求
  • 用更少的硬件資源獲得更好的性能
  • 更快地提供靜態內容

最後一部分就是為什麼這麼多人選擇使用 NGINX 作為反向代理解決方案的原因。 儘管有所有與性能相關的好處,但 NGINX 並非沒有缺陷。

儘管只有一個配置文件可以減少請求時間,但這也意味著 NGINX 不如 Apache 靈活。 這也適用於模塊,因為 NGINX 的開源版本強制您編譯模塊才能使用它們——而且您不能禁用它們。 在實踐中,這意味著設置 NGINX 以根據需要工作可能比使用 Apache 複雜得多。

使用 NGINX 的主要原因是性能是您的主要關注點。 在某些時候,流行的網站需要拔出大槍來處理大量流量,而不會出現停機、加載時間長等情況。 此外,由於 NGINX 可以讓您以更少的硬件資源獲得更好的性能結果,因此它可以成為更具成本效益的選擇。

結論

切換服務器或服務器軟件始終是一個重大決定。 因此,理想情況下,您希望使用將長期堅持使用的服務器解決方案。

在 Apache 與 NGINX 之間進行選擇並不像看起來那麼明確。 在許多情況下,決定權不會由您決定,因為您的網絡主機將決定使用什麼軟件。 在實踐層面上,您需要進行研究並找出網絡主機在承諾之前使用的選項。

您對如何在Apache和NGINX之間進行選擇有任何疑問嗎? 讓我們在下面的評論部分中討論它們!

ProStockStudio/shutterstock.com 的文章縮略圖