哪個是最好的 Web 服務器? (2021)
已發表: 2021-12-30雖然有許多不同類型的服務器軟件,但您通常會將競爭者縮減為 Nginx 與 Apache。 這是因為兩者都為許多不同的服務器配置提供了最佳性能,並且比另一個更適合某些應用程序。
即便如此,您仍然需要考慮其中哪一個更適合您的需求。 有幾個不同的類別需要研究,例如操作系統 (OS) 支持、安全性、文檔和(當然)性能。
在這篇文章中,我們將在多個不同領域比較 Nginx 和 Apache。 最後,我們將總結我們的發現並為您提供選擇正確選項所需的信息。
介紹 Nginx 和 Apache
在深入了解每種服務器類型之前,讓我們先簡要介紹一下 Nginx 和 Apache。 一旦我們進入下一部分,您將了解兩者的一些用例,以及您可能會在哪裡看到它們“在野外”。
Nginx
與 Apache 相比,Nginx(發音為“engine X” )是服務器端技術領域的一個相對新手。 然而,開發團隊承擔了擴展 Apache 系統限制的任務。
這是一個開源解決方案,許多用戶考慮其穩定性和可擴展性。 這(部分)歸結為它的事件驅動架構——稍後會更多。 事實上,最初 Nginx 版本的部分目標是能夠同時處理 10,000 個連接。 這在 2004 年是必要的,因為當時網絡迅速擴張。
總體而言,系統管理員和站點所有者喜歡 Nginx,因為它性能好,可以很好地處理靜態文件,並且可以執行負載均衡器和“反向代理”的功能。 這些都與正常運行時間、速度和安全性有關。
阿帕奇
Apache 在某種程度上是 Web 服務器技術的“老人”。 它幾乎與 Web 本身一樣古老——從 1995 年起,Apache 一直是數千台(如果不是數百萬台)服務器的核心軟件。
長期以來,Apache 一直是“系統管理員”中的主導技術。 造成這種情況的原因有很多——一些與性能有關,而另一些則與習慣有關。 無論如何,Apache 服務器在配置很重要的地方有很多用途。
您會發現 Apache 是所有 Linux 發行版上的預安裝軟件,因此它是該操作系統的首選解決方案。 然而,雖然它使用與 Nginx 不同的架構,但它仍然提供強大的功能、可擴展性和出色的文檔。
許多系統管理員也喜歡 Apache 的可定制特性,以及如何通過加載各種模塊來創建自己的服務器。
Nginx 與 Apache 的一般用例
公平地說,Apache 在服務網站方面是“萬事通”。 然而,這是喜憂參半。 是的,Apache 服務器幾乎可以做 Nginx 可以做的所有事情,但代價是性能較低的代碼。 年齡是這裡的一個因素。
因為 Apache 出現的時候,我們還沒有一些更高級的 Web 服務器應用程序,所以代碼庫無法滿足現代網站的需求。 雖然這些問題現在不一定值得關注,但 Nginx 等解決方案適用於現代網絡。
因此,您會發現 Apache 非常適合作為共享主機等應用程序的易於配置的服務器。 它的集成還將它用作本地開發服務器軟件,作為 Linux、Apache、MySQL 和 PHP (LAMP) 堆棧的一部分。
相比之下,Nginx 擁有更成熟的軟件基礎,與 Apache 相比,精簡程度更高。 如果穩定性和安全性是關鍵的基本要素,那就太好了。 你會發現 Nginx 服務器不像其他類型那樣可配置,這意味著你將更少地訪問它的核心。
更重要的是,它不像 Apache 那樣模塊化,這使得它不太適合需要進行服務器定制的情況。
Nginx vs Apache:每種服務器類型的流行程度
很長一段時間,服務器軟件類似於單馬賽跑。 Apache 多年來一直是主導力量,並且仍然擁有巨大的市場份額。 因此,您會發現有很多對 Apache 服務器的集成和支持,以及一流的文檔。
這是選擇 Apache 的進一步理由,並有助於其繼續使用。 然而,Nginx 是一個擁有巨大市場份額的服務器軟件。 隨著時間的推移,Nginx 的使用量緩慢上升,以至於它現在是市場上最占主導地位的 Web 服務器技術,儘管幅度不大。
展望未來,我們建議 Apache 的使用會隨著時間的推移而減少,因為 Nginx 提供了系統管理員在 Web 服務器中所需的大量功能。 然而,LiteSpeed Web Server 和 Cloudflare Server 即將問世,並伴隨著不斷增長的用戶群和強大的支持。 幾年後,這種比較可以將 Nginx 與這些年輕的新貴之一進行比較。
Nginx vs 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 將語言處理器嵌入到每個 worker 中。 這是一種效果很好的簡單方法。 如果需要進行更改,您也可以更換模塊。
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 如何“可視化”服務器文件系統。
相比之下,Nginx 有很多用例,例如負載均衡器、代理服務器和 Web 服務器。 因此,請求需要作為 Nginx 的 URI 來處理它們。 例如,Nginx 使用server
和location
塊:前者解釋請求的主機,後者匹配 URI 部分。 整個請求變成了一個 URI。
總的來說,URI 對 Nginx 來說更靈活,因為它可以適應它執行的任何功能。 即便如此,Apache 的系統仍然可以工作,因為它只需要履行作為 Web 服務器的角色。
Nginx vs Apache:2021 年你應該為你的服務器選擇哪一個
包羅萬象的答案,我應該選擇哪種服務器軟件? 很簡單:它是您的託管服務提供商提供的任何一個。 在很多情況下,您將別無選擇。 我們注意到,如果您想在 Nginx 和 Apache 之間做出決定,許多 Web 主機都遵循您應該匹配的相同模式:
- 如果您想運行需要持續配置的服務器,或者您想為用戶提供配置選擇,Apache 將滿足您的需求。
- 但是,如果您想提供超級性能、堅如磐石的安全性,並且想要處理配置而不是您的用戶,那麼 Nginx 是前進的方向。
在性能方面,由於其固有的架構,Apache可以佔用更多的內存。 Nginx 在高流量情況下會更好,尤其是在它必須處理大量靜態內容的情況下。
因此,如果您依靠緩存來存儲和提供內容,Nginx 可能是最佳選擇。 但是,請記住,Nginx 不能提供動態內容,因此您會受到更多的性能影響,具體取決於您的服務器使用的代理的效率。
結論
WordPress 的許多領域(以及運行網站)提供了幾乎壓倒性的選擇。 這是野獸的本性。 但是,當您需要使您的網站快速上線時,它無濟於事。
您對服務器類型的選擇是您需要格外小心的一項至關重要的一線決策。 Nginx 與 Apache 是一個常見的比較,因為兩者在某些情況下都有好處。
我們的觀點是,Nginx 可以以更高的性能覆蓋最多的基礎,這使其成為大多數 WordPress 用戶的更好選擇。 這就是為什麼許多流行的注重性能的 WordPress 主機已經轉向全 Nginx 服務器堆棧,包括 Kinsta 和 Flywheel。
無論如何,如果您沒有選擇,您可以安全地使用您的主機提供的任何內容,並且大多數 WordPress 網站都可以使用任何一個 Web 服務器。
您在 Nginx 與 Apache 之間的隔閡上處於什麼位置? 在下面的評論部分讓我們知道!