本文詳細討論 Apache 和 NGINX 伺服器之間的區別
- 哪個是最快的網絡服務器?
- 它們的主要優勢和局限性是什麼?
Apache 和 NGINX 你應該選擇哪一個?
使用AWS Cloud 託管服務或任何其他託管計劃,您可以根據自己的選擇服務器。
Apache 與 NGINX 的**區別**
Apache 和 NGINX 之間的主要區別在於它們的設計架構。Apache 使用進程驅動的方法並為每個請求創建一個新線程。而 NGINX 使用事件驅動架構在一個線程內處理多個請求。
- 什麼是 Apache HTTP 服務器?
- 什麼是 NGINX Web 服務器?
- 建築學
- 表現
- 操作系統支持
- 配置
- 解釋
- 模塊
- 靈活性
- 安全
- 支持
- 最後的收穫
- 什麼時候選擇 Apache 而不是 NGINX?
- 什麼時候選擇 NGINX 而不是 Apache?
- Apache 和 NGINX- 一起
什麼是 Apache HTTP 服務器?
Apache HTTP Server是一個開源的跨平台 Web 服務器,也稱為“httpd”和 Apache。它由 Tim Berners Lee 開發並於 1995 年發布。Apache 迅速流行起來,現在由 Apache 基金會維護。
關於 Apache 的知識:
- Apache Software Foundation管理其品牌和服務。
- 該服務器由 ASF 下的開放開發者社區開發和維護。
- Apache 主要在 Linux 上運行,為全球約 46% 的網站提供支持。
- 它是 LAMP(Linux、Apache、MySQL、PHP)堆棧的關鍵組件。
什麼是 NGINX Web 服務器?
什麼是NGINX?
發音為“Engine X”——它是一個 Web 服務器,由 Igor Sysoev 於 2004 年發布。今天,它不僅僅是一個網絡服務器!由於我們將在本文中看到的各種因素,NGINX 現在比 Apache Web Server 更受歡迎。
以下是您應該了解的有關 Nginx 服務器的信息:
- 起初,人們大多將 Nginx 作為 Apache 的補充。
- 它主要用於提供靜態文件,但今天,它已經發展成為一個完整的 Web 服務器,可以處理所有服務器任務。
- 如今,Nginx 經常用作反向代理、負載均衡器、郵件代理和 HTTP 緩存。
Apache 和 Nginx 都是Linux最常用的 Web 服務器。它們共同服務於網絡上50% 以上的流量。
PS雖然 Apache 和 Nginx 有很多共同點,但它們在很多方面都有所不同。每個人都以自己的方式出類拔萃,並且有自己的用途和場景。
要了解差異並得出結論,讓我們在下面進行詳細的端到端比較。我們還在每個點的末尾提到了每個比較點的獲勝者。
基本架構
當談到 Apache 與 Nginx 時,根本的區別在於它們的設計架構。這意味著它們在處理連接和流量以及響應不同流量條件的實際方式上有所不同。
Apache 意味著過程驅動的方法,而 NGINX 遵循事件驅動的架構。
Apache
- 過程驅動方法
- 為每個請求創建一個新線程。
Apache 採用多線程方法。它提供了多種多樣的處理模塊。這些預模塊基本上是三種類型的請求處理算法。每個都適用於不同的服務器需求。
MPM(多處理模塊)提供了一個靈活的架構來選擇不同的連接和不同的處理算法。
此外,不同版本的 Apache 2 使用不同的處理模塊。
三個主要的 Apache MPM 是:
- 進程(預分叉)MPM
- 工人 MPM
- 事件MPM
老派 Apache (2.2) 使用 mpm_worker、mpm_prefork 和 mod_php。而 Apache 2.4(新的 apache)被配置為使用 mpm_event,php-fpm。
默認情況下,Apache 2.2 配置為 Pre-fork 模式 (mpm_prefork)。它響應一定數量的進程,每個進程一次可以處理一個請求。
也就是說,Apache 每次都會創建一個新的線程來處理每個連接請求。
線程:線程是可以由調度程序獨立管理的最小程序指令序列。在大多數情況下,線程是進程的一個組件。
但是,Apache 的基本架構會導致大量資源消耗,從而導致服務器出現問題(例如速度慢)。
NGINX
- 事件驅動方法
- 在一個線程中處理多個請求
Nginx 採用事件驅動架構並異步處理請求。
它旨在使用非阻塞事件驅動的連接處理算法。因此,它的進程可以在一個處理線程內處理數千個連接(請求)。這樣的連接處理模塊允許 Nginx 在有限的資源下工作得非常快和廣泛。
此外,您可以在低功耗系統和在重負載下運行的系統上使用 Nginx。
優勝者:
NGiNX – 它具有輕量級結構,並且比 Apache 的架構快得多。
表現
以 Apache 與 Nginx 為例,這兩種 Web 服務器處理靜態和動態內容的方式不同。他們說 Nginx 在處理靜態內容方面更好,讓我們看看這是不是真的!
2.1 靜態內容
Apache
- 使用基於文件的方法提供靜態內容
靜態內容或文件通常是存儲在服務器計算機磁盤上的文件,例如 CSS 文件、JavaScript 文件或圖像。Apache 使用其傳統的基於文件的方法處理靜態內容。
NGINX
- 在提供靜態內容方面,Nginx 是王者!
由於 Nginx 的設計架構能夠更好地處理負載,因此在提供靜態內容時速度更快。
根據運行多達 1,000 個同時連接的基準測試,它的執行速度比 Apache 快 2.5 倍。
Nginx 提供靜態資源,而 PHP 不必知道這一點。另一方面,Apache 以昂貴的開銷處理所有這些請求。這使得 Nginx 更有效並且對系統資源的要求更低。
這個小圖片顯示了沒有。每秒處理的靜態內容請求數。Nginx 在這裡明顯超越了 Apache!
2.2 動態內容
Apache
- 處理服務器內的動態內容
Apache 可以在 Web 服務器本身內處理動態內容,而無需依賴任何外部組件。因此,它可以自己處理您的信條。
談論 Apache 與 Nginx 性能:Nginx,如果不是更好,在考慮動態內容處理時幾乎是相等的。
這是每秒動態內容請求數的比較。看起來差別不大。
NGINX
- 它不處理動態內容
談到動態內容,Nginx 無法像 Apache 那樣在 Web 服務器中處理它。所有具有動態網頁內容的請求都被傳遞到外部進程(例如 PHP-FPM)以執行。
Nginx 等待最終內容返回並將其返回給客戶端。參考這張圖片以獲得清晰的想法:
當與 SCGI 處理程序和 FastCGI 模塊一起使用時,NGINX 可以提供動態內容。
[推文“當與 SCGI 處理程序和 FastCGI 模塊一起使用時,NGINX 可以提供動態內容。”]
PS這個過程聽起來有點複雜。然而,它在某種程度上對它有利並且使 Nginx 更快。
優勝者:
Static:就Static內容而言,Nginx凌駕於Apache之上。
動態:兩者都擅長處理動態內容。
操作系統支持
操作系統支持可能是一個需要考慮的重點,尤其是在比較 Apache 與 Nginx 時。但是,他們兩個在這裡幾乎相似。
Apache
- 支持所有類 Unix 系統,包括 Linux 和 BSD。
- 完全支持 MS-Windows
Apache 可在各種類 Unix 系統(例如 Linux 或 BSD)上運行,並完全支持 Microsoft Windows。
NGINX
- 支持幾乎所有類 Unix 操作系統
- 部分支持Windows。
它也可以運行在幾個現代的類 Unix 系統上,並且對 Windows 有一定的支持,但是它的 Windows 性能不如其他平台強。
優勝者:
Apache在這裡勝出。
分佈式/集中配置
Apache vs Nginx 是當之無愧的話題。它們的配置使它們彼此不同,並使它們同樣有趣。讓我們看看誰的配置更簡單、更快。
Apache
- 允許通過 .htaccess 文件在每個目錄的基礎上進行額外配置。
這種架構允許非特權用戶控制其網站的某些方面,而無需授予他們編輯主配置的權限。這很大!
NGINX
- 不允許額外配置
另一方面,它有一個缺點。它不提供額外的配置。但是,它對您有利,因為這會提高性能。
通過不允許目錄配置,它可以比 Apache 更快地處理請求。它不需要搜索 .htaccess 文件並解釋用戶提出的請求。
優勝者:
Apache如果考慮配置;NGiNX如果速度的話。
請求翻譯
在 Apache 與 Nginx 的辯論中,解釋請求的方法是一個有趣的比較話題。他們都以完全不同的方式處理和解釋請求。
他們不同的方法使他們獨一無二,也使一個比另一個更好。讓我們探討如何!
Apache
- 通過文件系統位置
提供解釋請求的能力。作為文件系統位置上的物理資源,可能需要更抽象的評估。它將請求作為文件系統位置傳遞。
當然,Apache 確實使用 URI 位置,但它們通常用於更抽象的資源。在創建或配置虛擬主機時,Apache 使用文檔根目錄下的目錄塊。
這種對文件系統位置的偏好也可以在使用 .htaccess 文件覆蓋特定目錄配置時看到。
NGINX
- 傳遞 URI 來解釋請求
Nginx 被創建為既是 Web 服務器又是反向代理服務器。由於對這些的架構要求,Nginx 主要與您的眼睛一起工作。必要時翻譯成系統。
它不提供指定配置的機制。對於文件系統目錄,而是傳遞它們的 URI 本身。將請求作為 URI 而不是文件系統位置傳遞,允許 Nginx 在 Web 和代理服務器中輕鬆運行。它通過列出如何響應差異請求模式來配置簡單。
在準備好處理請求之前,它不會檢查文件系統它解釋了為什麼它不實現任何形式的 .htaccess 文件。
這種將請求解釋為 URI 位置的設計使 Nginx 不僅可以輕鬆地充當 Web 服務器,還可以充當代理服務器、負載平衡器和 HTTP 緩存。
此外,在 Apache vs Nginx 競賽中,NGINX 在傳輸速率(數據從服務器發送到客戶端的速度)方面再次獲勝。在大多數情況下,Nginx 以 500/100 的優勢獲勝。
優勝者:
似乎Nginx贏了,因為它更快的解釋和響應。
功能模塊
兩者都可以通過模塊系統進行擴展。但他們的工作方式不同。讓我們比較一下這兩種 Web 服務器的功能模塊:Apache 與 Nginx!
Apache
- 60 個可以打開/關閉的官方動態可加載模塊
Apache 服務器具有一組豐富的功能,可以通過安裝 60 個官方模塊中的一個來啟用。還有許多其他非官方模塊,可以在 Internet 上輕鬆找到。
它的模塊系統允許您動態加載或卸載模塊以滿足您的需要。它的模塊可以打開或關閉以添加或刪除功能並連接到主服務器。
簡而言之,Apache 有幾個功能模塊可以滿足您的需要,但其中許多並不經常使用。
NGINX
- 第 3 方核心模塊(不可動態加載)
另一方面,Nginx 被選擇並編譯到3rd party plugins的過程中。不可動態加載。雖然這些模塊很有用,但它們允許您通過僅包括您打算使用的功能來決定您想要從服務器獲得什麼。
它被認為比 Apache 服務器安全得多,因為可以在服務器中掛接任意組件。
此外,NGINX 提供了 Web 服務器的所有核心功能,而沒有犧牲使其成功的輕量級和高性能品質。
注意: Apache 就像 Microsoft Word,而 Nginx 就像記事本。如何?Apache 有一百萬個選項,但您只需要幾個。NGINX 做那些“少數”事情,並且比 Apache 快 50 倍。
優勝者:
NGiNX – 不太重要的功能和模塊使它比 Apache 更輕、更智能和更好的 Web 服務器。
靈活性
當涉及到 Web 服務器時,靈活性是最重要的問題之一。Apache 與 Nginx 的靈活性有一些有趣的區別。
Apache
- 支持通過動態模塊定制Web服務器。
可以通過騎行模塊對 Web 服務器進行自定義。Apache 擁有最長的動態模塊加載時間,因此所有 Apache 模塊都支持這一點。
NGINX
- 不夠靈活,無法支持動態模塊和加載。
然而,NGINX 並非如此。2016年初,NGINX獲得動態模塊加載支持;以前,NGINX 需要管理員將模塊編譯成 NGINX 二進製文件。
大多數模塊尚不支持動態加載,但隨著時間的推移它們可能會支持。
優勝者:
Apache—— 它顯然在這一點上處於領先地位。
安全
Apache vs Nginx 安全性再次成為爭論的話題。好吧,這兩個 Web 服務器都為其基於 C 的代碼庫提供了強大的擴展安全性。
所以,用戶,放輕鬆!
Apache
- 很好的安全性。
Apache 確保在其服務器上運行的所有網站都免受任何傷害和黑客攻擊。
因此,它提供了用於處理 DDoS 攻擊的配置提示,以及用於響應 HTTP DoS、DDoS 或暴力攻擊的 mod_evasive 模塊。
NGINX
- 更小的代碼庫帶來更好的安全性。
然而,NGINX 代碼庫明顯小了幾個數量級,所以從前瞻性的安全角度來看,這絕對是一個很大的優勢。NGINX 也有一個最近的安全公告列表。在 Nginx 博客上閱讀有關減輕 DDoS 攻擊的文章。
優勝者:
Nginx – 它被認為更安全
支持
支持是每個客戶都熱切期待的。它可以成就或破壞您的用戶體驗。在比較 Apache 和 Nginx 的支持時,似乎沒有太大區別。
Apache
- 社區支持通過郵件列表、IRC 和 Stack Overflow 完成。
許多第三方公司(例如 OpenLogic)提供商業 Apache 支持,但 Apache 基金會沒有維護官方列表。Apache 服務器旨在為其所有用戶提供強大的支持。
NGINX
- 通過郵件列表、IRC、Stack Overflow 和論壇提供社區支持。
NGINX 背後的公司提供了一個名為 NGINX Plus 的商業產品,它支持一組關於負載平衡、媒體流和監控的額外功能。
優勝者:
這是一個平局!兩者的支持幾乎相同。兩個網絡服務器都很棒。
以下是 Apache 與 NGINX 的比較圖表作為總結:
最後的收穫
Apache 和 Nginx 不能相互替代,各有優缺點。在了解了優勢、限制和差異之後,您可能已經知道最適合您的 Web 服務器。
好吧,在我們關於 Apache vs Nginx 的帖子中,NGINX 贏得了 9 分中的 5 分,Apache 獲得了 2 分,Apache 和 Nginx 之間“平局”了 2 分。因此,我們可以清楚地看到,NGINX 領先於 Apache。
仍然對哪種服務器更適合您感到困惑?讓我們找出 – 何時選擇哪個!
什麼時候選擇 Apache 而不是 NGINX?
一)Apache.htaccess
NGINX 不支持 Apache 的 .htaccess 文件之類的東西。但是,使用 Apache,您可以獲得讓非特權用戶控制其網站某些重要方面的優勢。
- 顯然,用戶無權編輯主配置。
- 使用 .htaccess 文件,您可以在每個目錄的基礎上覆蓋系統範圍的設置。
- 為了獲得最佳性能,請在主配置文件中包含這些 .htaccess 指令。
- 在共享主機環境中,Apache 因其 .htaccess 配置而工作得更好。
PS 對於專用主機或 VPS Nginx 仍然是最佳選擇。
ii) 如果功能受限——使用 Apache
Nginx 有一些非常重要的核心模塊。然而,Nginx 有一些功能限制。如果有一些限製或需要使用 Nginx 不支持的額外模塊,您可能需要選擇 Apache。
什麼時候選擇 NGINX 而不是 Apache?
i) 快速靜態內容處理
Nginx 可以更好地處理來自特定目錄的靜態文件。
此外,上游服務器進程不會因為繁重的多個靜態內容請求而被阻塞,因為 Nginx 可以同時處理它們。這顯著提高了後端服務器的整體性能。
Nginx 一直在努力為其用戶提供更好的體驗。它在 2022 年顯示出一些顯著的增長並已超過 Apache 市佔率來到 34%。
ii) 非常適合高流量網站
如果我們談論速度以及可以在高負載下為多少客戶端提供服務,Nginx 將永遠是 Apache 的贏家。
這使得 Nginx 非常輕巧,非常適合服務器資源。這就是為什麼大多數 Web 開發人員更喜歡 Nginx 而不是 Apache。
特別是如果你今天想要用 Magento 打造高流量的電商網站,大部分的開發者只擅長在 Nginx 上作業。
簡單來說, 在為大流量網站提供服務時,Nginx 無可匹敵。這也是為什麼 Tenten 老早在 8 年前即棄用了當是業界流行的 LAMP (Linux-Apache-MySQL-PHP 架構), 轉而選擇使用 LEMP (Linux+Nginx+MySQL+PHP), 而目前 Nginx 已經超越了 Apache 成為現在最受歡迎的伺服器架構
當然你也可以同時使用它們!
是的,Apache 和 Nginx 也可以成為朋友!
可以通過一起使用每個服務器的優勢。
您可以使用 Apache 前面的 Nginx 作為服務器代理(如下圖所示)。這利用了 Nginx 的快速處理速度和同時建立大量連接的能力。
對於靜態連接,Nginx 會快速將文件提供給客戶端。對於動態內容,例如 Php 文件,Nginx 反向代理服務器會將他們的請求代理到 Apache,然後 Apache 可以處理他們的結果並返回他們呈現的頁面。
Nginx 然後可以將最終內容傳遞給客戶端。此外,它還允許您擁有一個非常實用的網絡服務器,可以非常快速地為您的客戶(大量用戶)提供服務。
Apache vs Nginx 競賽到此結束!
決定您將使用哪個 Web 服務器,Nginx 或 Apache,是設置網站的重要步驟。
這兩種解決方案都能夠處理不同的工作負載並與其他軟件協同工作以提供完整的 Web 堆棧。
我們希望這份端到端比較指南能幫助您挑選出最適合您的 Web 服務器。想要了解更多可透過以下鏈結與我們聯繫?與我們聯繫