????????在這篇文章中卖哎,我將詳細(xì)討論Apache和NGINX服務(wù)器的區(qū)別。哪個(gè)是最快的 Web 服務(wù)器录淡?它們的主要優(yōu)點(diǎn)和限制是什么捌木?你應(yīng)該去哪一個(gè)?
? ??????Apache 和 NGINX 的主要區(qū)別在于其設(shè)計(jì)架構(gòu)嫉戚。Apache 使用進(jìn)程驅(qū)動(dòng)的方法刨裆,并為每個(gè)請求創(chuàng)建一個(gè)新線程。NGINX 使用事件驅(qū)動(dòng)的體系結(jié)構(gòu)來處理一個(gè)線程中的多個(gè)請求彬檀。
什么是Apache HTTP服務(wù)器帆啃?
? ??????Apache HTTP 服務(wù)器是一種開源跨平臺(tái) Web 服務(wù)器,也稱為"httpd"和 Apache窍帝。他是Apache 軟件基金會(huì)管理其品牌和服務(wù)努潘。服務(wù)器由 ASF 下的開放開發(fā)人員社區(qū)開發(fā)和維護(hù)。Apache 主要運(yùn)行在 Linux 上,它支持全球 46% 的網(wǎng)站疯坤。它是 LAMP(Linux报慕、Apache、MySQL压怠、PHP)堆棧的關(guān)鍵組件眠冈。
什么是NGINX Web服務(wù)器?
? ??????什么是NGINX菌瘫?發(fā)音為? 它的發(fā)音是 “Engine X” 它是伊戈?duì)枴の魉饕蛟?2004 年發(fā)布的 Web 服務(wù)器蜗顽。今天,它不僅僅是一個(gè)網(wǎng)絡(luò)服務(wù)器突梦!起初,人們大多使用 Nginx 作為Apache的補(bǔ)充.它主要用于提供靜態(tài)文件羽利,但今天宫患,它已演變?yōu)橐粋€(gè)完整的Web服務(wù)器,處理整個(gè)web服務(wù)器任務(wù)这弧。Nginx 經(jīng)常用作反向代理娃闲、負(fù)載均衡器、郵件代理和 HTTP 緩存匾浪。Apache和Nginx都是Linux最常見的網(wǎng)絡(luò)服務(wù)器皇帮。它們共同為網(wǎng)絡(luò)流量的 50%以上提供服務(wù)。
? ??????雖然Apache和NGINX有許多共同的品質(zhì)蛋辈,但在許多方面是不同的属拾。每個(gè)都以自己的方式出類拔萃,并有自己的用途和方案冷溶。為了了解差異并得出結(jié)論渐白,讓我們通過下面的詳細(xì)、端到端的比較逞频。我們還提到每個(gè)點(diǎn)結(jié)束時(shí)每個(gè)比較點(diǎn)的優(yōu)勝者纯衍。
基本架構(gòu)
????????當(dāng)談到Apache 和Nginx 時(shí),根本區(qū)別在于他們的設(shè)計(jì)架構(gòu)苗胀。這意味著它們的實(shí)際處理連接和流量以及響應(yīng)不同的流量條件的方式不同襟诸。一種是過程驅(qū)動(dòng)的方法,另一個(gè)是事件驅(qū)動(dòng)的體系結(jié)構(gòu)基协。
Apache
?● 流程驅(qū)動(dòng)方法
●?為每個(gè)請求創(chuàng)建一個(gè)新線程歌亲。
????????Apache 采用多線程方法。它提供各種多個(gè)處理模塊澜驮。這些預(yù)模塊基本上是三種類型的請求處理算法应结。每個(gè)都用于不同的服務(wù)器需求。MPM(多處理模塊)提供了一個(gè)靈活的架構(gòu),用于選擇不同的連接和不同的處理算法鹅龄。此外揩慕,不同版本的 Apache 2 采用不同的游行模塊。
三個(gè)主要的Apache MPM是:
1.過程(預(yù)叉)MPM
2.人工MPM
3.事件MPM
????????默認(rèn)情況下扮休,Apache 2.2 配置為預(yù)叉模式(mpm_prefork)迎卤。它響應(yīng)一組進(jìn)程,每個(gè)進(jìn)程一次可以處理單個(gè)請求玷坠。換句話說蜗搔,Apache 每次都會(huì)創(chuàng)建一個(gè)新線程來處理每個(gè)連接請求。
????????線程是可由調(diào)度程序獨(dú)立管理的最小編程指令序列八堡。在大多數(shù)情況下樟凄,線程是進(jìn)程的組件。但是兄渺,Apache 的基本體系結(jié)構(gòu)可能導(dǎo)致大量資源消耗缝龄,因此,可能會(huì)導(dǎo)致服務(wù)器的問題(例如速度慢)挂谍。
Nginx
●?事件驅(qū)動(dòng)方法
●?在一個(gè)線程內(nèi)處理多個(gè)請求
????????Nginx 使用事件驅(qū)動(dòng)的體系結(jié)構(gòu)叔壤,并異步處理請求。
????????它旨在使用非阻塞事件驅(qū)動(dòng)連接處理算法口叙。因此炼绘,其進(jìn)程可以在一個(gè)處理線程中處理數(shù)千個(gè)連接(請求)。這種連接過程模塊使 Nginx 能夠以有限的資源快速妄田、寬工作俺亮。
????????此外,您還可以在低功耗系統(tǒng)上和在重負(fù)載下運(yùn)行的系統(tǒng)上使用 Nginx疟呐。
優(yōu)勝者:
NGiNX –它的結(jié)構(gòu)輕量級铅辞,架構(gòu)比 Apache 快得多。
性能
????????以 Apache vs Nginx 來說萨醒,兩個(gè) Web 服務(wù)器對靜態(tài)和動(dòng)態(tài)內(nèi)容處理方式都不同斟珊。他們說 Nginx 在處理靜態(tài)內(nèi)容時(shí)更好, 讓我們看看這是不是真的富纸!
靜態(tài)內(nèi)容
Apache
????????使用基于文件的方法提供靜態(tài)內(nèi)容
????????靜態(tài)內(nèi)容或文件通常是存儲(chǔ)在服務(wù)器計(jì)算機(jī)上磁盤上的文件囤踩,例如 CSS 文件、JavaScripts 文件或圖像晓褪。Apache 使用其傳統(tǒng)的基于文件的方法處理靜態(tài)內(nèi)容堵漱。
Nginx
? ??????在提供靜態(tài)內(nèi)容時(shí), Nginx 是大哥涣仿。
????????由于 Nginx 的設(shè)計(jì)架構(gòu)更有能力處理負(fù)載勤庐,因此在提供靜態(tài)內(nèi)容方面速度要快得多示惊。根據(jù)高達(dá) 1,000 個(gè)同時(shí)連接的基準(zhǔn)測試愉镰,其性能比 Apache 快 2.5 倍米罚。Nginx 為靜態(tài)資源服務(wù),而 PHP 無需了解這一點(diǎn)丈探。另一方面录择,Apache 以昂貴的開銷處理所有這些請求。這使得 Nginx 更加有效碗降,對系統(tǒng)資源的要求更低隘竭。
????????這個(gè)小圖像顯示的是靜態(tài)內(nèi)容請求,以秒處理讼渊。Nginx 顯然在這里超過了Apache动看!
動(dòng)態(tài)內(nèi)容
Apache
????????處理服務(wù)器內(nèi)的動(dòng)態(tài)內(nèi)容
????????Apache 可以在 Web 服務(wù)器本身中處理動(dòng)態(tài)內(nèi)容,而無需依賴任何外部組件爪幻。所以菱皆,它可以處理你的本身。談?wù)?Apache vs Nginx 性能:在考慮動(dòng)態(tài)內(nèi)容處理時(shí)笔咽,Nginx(如果不是更好的話)幾乎相等搔预。
????????下面是對動(dòng)態(tài)內(nèi)容請求數(shù)的比較霹期∫蹲椋看起來沒有什么區(qū)別。
Nginx
????????不處理動(dòng)態(tài)內(nèi)容
????????它不處理動(dòng)態(tài)內(nèi)容,談到動(dòng)態(tài)內(nèi)容历造,Nginx 無法像 Apache 那樣在 Web 服務(wù)器中處理動(dòng)態(tài)內(nèi)容甩十。所有具有動(dòng)態(tài)網(wǎng)頁內(nèi)容的請求都傳遞到外部進(jìn)程(例如 PHP-FPM)執(zhí)行。Nginx 等待最終內(nèi)容返回并交付給客戶端吭产。請參考此圖片以了解一個(gè)清晰的想法:
????????當(dāng)與 SCGI 處理程序和 FastCGI 模塊一起使用時(shí)侣监,NGINX 可以為動(dòng)態(tài)內(nèi)容提供服務(wù)。
優(yōu)勝者:
靜態(tài):就靜態(tài)內(nèi)容而言臣淤,Nginx 完勝 Apache橄霉。
動(dòng)態(tài):兩者都擅長處理動(dòng)態(tài)內(nèi)容。
操作系統(tǒng)支持
????????操作系統(tǒng)支持可能是需要考慮的重要一點(diǎn)邑蒋,尤其是在比較 Apache 與 Nginx 時(shí)姓蜂。但是,兩者在這里幾乎相似医吊。
Apache
支持所有與 Unix 一樣的系統(tǒng)钱慢,包括 Linux 和 BSD
它完全支持 MS-Windows
????????Apache 運(yùn)行在各種與 Unix 一樣的系統(tǒng)(例如 Linux 或 BSD)上運(yùn)行,并且完全支持微軟 Windows卿堂。
Nginx
支持幾乎所有與 Unix 一樣操作系統(tǒng)
部分支持 Windows束莫。
????????它還在幾個(gè)現(xiàn)代 Unix 的系統(tǒng)上運(yùn)行懒棉,并且對 Windows 有一些支持,但其 Windows 性能不像其他平臺(tái)那樣強(qiáng)大览绿。
優(yōu)勝者:
Apache在這里脫穎而出~
分布式/集中配置
? ??????Apache?vs Nginx 是一個(gè)當(dāng)之無愧的話題策严。他們的配置使他們彼此不同,使他們同樣有趣挟裂。讓我們看看誰的配置更容易享钞、更快。
Apache
通過 .htaccess 文件允許基于每個(gè)目錄進(jìn)行其他配置
????????此體系結(jié)構(gòu)允許非特權(quán)用戶控制其網(wǎng)站的某些方面诀蓉,而無需授予他們編輯主配置的權(quán)限栗竖。這個(gè)很大!
Nginx
不允許進(jìn)行其他配置
????????另一方面渠啤,它有一個(gè)缺點(diǎn)狐肢。它不提供其他配置。然而沥曹,它有利于你份名,因?yàn)檫@增加了性能。通過不允許目錄配置妓美,它可以比 Apache 更快地提供請求僵腺。它不需要搜索 .htaccess 文件并解釋用戶制作的 req。
優(yōu)勝者:
如果考慮了配置是? Apache
如果速度是 NGinx壶栋。
請求解釋
? ??????在 Apache vs Nginx 辯論中辰如,解釋請求的方法是一個(gè)有趣的話題進(jìn)行比較。它們都以完全不同的方式處理和解釋請求贵试。他們不同的方法使他們獨(dú)特琉兜,也使一個(gè)比另一個(gè)更好一點(diǎn)。讓我們來探索一下毙玻!
Apache
通過文件系統(tǒng)位置
????????傳遞文件系統(tǒng)位置豌蟋,提供解釋要求的能力。作為文件系統(tǒng)位置的物理資源桑滩,可能需要更抽象的評估梧疲。它將請求作為文件系統(tǒng)位置傳遞。當(dāng)然运准,Apache 確實(shí)使用 URI 位置幌氮,但它們通常用于更抽象的資源。在創(chuàng)建或配置虛擬主機(jī)時(shí)戳吝,Apache 使用文檔根目錄下的目錄塊浩销。
????????在使用 .htaccess 文件覆蓋特定目錄配置時(shí),也可以看到對文件系統(tǒng)位置的這種偏好听哭。
Nginx
通過 URI 來解釋請求
????????Nginx 被創(chuàng)建為 Web 服務(wù)器和反向代理服務(wù)器慢洋。由于這些架構(gòu)的要求塘雳,Nginx主要使用你的眼睛。必要時(shí)轉(zhuǎn)換為系統(tǒng)普筹。
????????它不提供指定配置的機(jī)制败明。對于文件系統(tǒng)目錄,則傳遞其 URI 本身太防。將請求(URI)而不是文件系統(tǒng)位置傳遞妻顶,使Nginx能夠輕松地在 Web 和代理服務(wù)器中運(yùn)行。它通過布局如何響應(yīng)差異請求模式來簡單配置蜒车。
????????在準(zhǔn)備好處理請求之前讳嘱,它不會(huì)檢查文件系統(tǒng)。它解釋了為什么它不實(shí)現(xiàn)任何形式的.htaccess文件酿愧。
????????這種將請求解釋為 URI 位置的設(shè)計(jì)使 Nginx 不僅能夠輕松地充當(dāng) Web 服務(wù)器沥潭,還能夠用作代理服務(wù)器、負(fù)載均衡器和 HTTP 緩存嬉挡。此外钝鸽,在 Apache vs Nginx 競賽中,NGINX 在傳輸速率(數(shù)據(jù)從服務(wù)器發(fā)送到客戶端的速度)方面再次獲勝庞钢。在大多數(shù)情況下拔恰,Nginx 以 500/100 的公平金額獲勝。
優(yōu)勝者:
似乎Nginx贏了基括, 因?yàn)樗慕忉尯头磻?yīng)更快颜懊。
功能模塊
????????兩者都是通過模塊系統(tǒng)可擴(kuò)展的。但他們的工作方式是不同的阱穗。讓我們比較兩個(gè) Web 服務(wù)器的功能模塊:Apache vs Nginx饭冬!
Apache
60 個(gè)可動(dòng)態(tài)加載的官方模塊使鹅,可打開/關(guān)閉
????????Apache 服務(wù)器具有一組豐富的功能揪阶,可以通過安裝 60 個(gè)官方模塊之一來啟用這些功能。還有許多其他非官方的模塊患朱,可以很容易地在互聯(lián)網(wǎng)上找到鲁僚。
????????其模塊系統(tǒng)允許您動(dòng)態(tài)加載或卸載模塊,以滿足您的需求裁厅。其模塊可以打開或關(guān)閉以添加或刪除功能冰沙,并連接到主服務(wù)器。
????????簡而言之执虹,Apache 有幾個(gè)功能模塊可滿足您的需求拓挥,但許多模塊并不經(jīng)常使用。
Nginx
第三方核心模塊(不可動(dòng)態(tài)加載)
????????另一方面袋励,Nginx被挑選并編譯為第三方插件的過程侥啤。不可動(dòng)態(tài)加載当叭。這些模塊很有用,但是盖灸,它們允許您僅包括要使用的功能來決定從服務(wù)器獲得什么內(nèi)容蚁鳖。
????????它被認(rèn)為比 Apache 服務(wù)器安全得多,因?yàn)槿我饨M件可以在服務(wù)器中連接赁炎。
????????此外醉箕,NGINX 還提供 Web 服務(wù)器的所有核心功能,而不會(huì)犧牲成功所需的輕量級和高性能特性徙垫。Apache 就像微軟 Word讥裤,Nginx 就像記事本。Apache 有一百萬個(gè)選項(xiàng)姻报,但你只需要幾個(gè)坞琴。Nginx 做這些 "幾個(gè)" 的事情, 做他們比Apach快 50 倍逗抑。
優(yōu)勝者:
NGiNX – 重要性不高的功能和模塊使它比 Apache 更輕剧辐、更智能、更好的Web服務(wù)器邮府。
靈活性
????????靈活性是 Web 服務(wù)器最重要的問題之一荧关。Apache vs Nginx 靈活性有一些有趣的差異。
Apache
支持通過動(dòng)態(tài)模塊自定義 Web 服務(wù)器褂傀。
????????可以通過騎乘模塊對 Web 服務(wù)器進(jìn)行自定義忍啤。Apache 的動(dòng)態(tài)模塊加載時(shí)間最長,因此所有 Apache 模塊都支持此功能仙辟。
Nginx
不夠靈活同波,無法支持動(dòng)態(tài)模塊和加載
????????然而,NGINX的情況并非如此叠国。2016 年初未檩,NGINX 獲得動(dòng)態(tài)模塊加載支持;以前,NGINX 要求管理員將模塊編譯為 NGINX 二進(jìn)制文件粟焊。大多數(shù)模塊尚不支持動(dòng)態(tài)加載冤狡,但隨著時(shí)間的推移,它們可能會(huì)支持動(dòng)態(tài)加載项棠。
優(yōu)勝者:
Apache – 它顯然在這一點(diǎn)上領(lǐng)先悲雳。
安全
????????Apache vs Nginx 安全性再次成為爭論的話題。嗯香追,這兩個(gè) Web 服務(wù)器都為基于 C 的代碼庫提供了出色的擴(kuò)展安全性合瓢。
Apache
非常安全
????????Apache 確保所有在其服務(wù)器上運(yùn)行的網(wǎng)站都是安全的,不會(huì)受到任何傷害和黑客攻擊透典。因此晴楔,它提供了用于 DDoS 攻擊處理的配置提示迁央,以及用于響應(yīng) HTTP DoS、DDoS 或暴力攻擊的 mod_evasive 模塊滥崩。
Nginx
最少的代碼實(shí)現(xiàn)更好的安全
????????然而岖圈,NGINX的代碼庫明顯小了幾個(gè)數(shù)量級,所以從前瞻性的安全角度來看钙皮,這絕對是一個(gè)很大的優(yōu)勢蜂科。NGINX還列出了最近的安全建議。在Nginx博客上閱讀一篇關(guān)于抵御DDoS攻擊的文章短条。
優(yōu)勝者:
Nginx–被認(rèn)為更安全
支持
????????支持是每個(gè)客戶都渴望得到的导匣。它可以改變或破壞你的用戶體驗(yàn)。在比較Apache和Nginx支持時(shí)茸时,似乎沒有太大區(qū)別贡定。
Apache
社區(qū)支持通過郵件列表、IRC和堆棧溢出完成
????????商業(yè)Apache支持可以從許多第三方公司獲得可都,比如OpenLogic缓待,但是Apache基金會(huì)沒有維護(hù)官方列表。Apache服務(wù)器旨在為其所有用戶提供強(qiáng)大的支持渠牲。
Nginx
通過郵件列表旋炒、IRC、堆棧溢出和論壇提供社區(qū)支持
????????NGINX 背后的公司提供名為 NGINX Plus 的商業(yè)產(chǎn)品签杈,該產(chǎn)品支持一組有關(guān)負(fù)載平衡瘫镇、媒體流和監(jiān)控的額外功能。
優(yōu)勝者:
這是一個(gè)平局答姥,兩者的支持幾乎相同铣除。兩個(gè) Web 服務(wù)器都很棒。
最終
????????Apache和Nginx都無法被對方取代鹦付, 他們有他們的強(qiáng)弱尚粘。在了解好處、限制和差異之后睁壁,您可能已經(jīng)擁有了最適合您的 Web 服務(wù)器的想法背苦。
????????在關(guān)于Apache對 Nginx 的帖子中互捌, 9分中的5分被 Nginx 贏得潘明, 2 分被Apache和nginx "平局" 。因此秕噪,我們可以清楚地看到钳降,NGINX領(lǐng)先Apache。
何時(shí)選擇
????????仍然困惑于哪臺(tái)服務(wù)器更適合您的解決方案腌巾?讓了解一下 - 何時(shí)選擇遂填!
何時(shí)選擇Apache而不是 Nginx铲觉?
1.Apache.htaccess
????????NGINX 不支持類似 Apache 的.htaccess 文件。但是吓坚,使用 Apache撵幽,您可以獲得優(yōu)勢,讓非特權(quán)用戶控制其網(wǎng)站的某些重要方面礁击。
顯然盐杂,用戶不允許編輯主配置。
使用 .htaccess 文件哆窿,可以基于每個(gè)目錄覆蓋系統(tǒng)范圍的設(shè)置链烈。
為了獲得最佳性能,請將這些 .htaccess 指令包括在主配置文件中挚躯。
在共享托管環(huán)境中强衡,Apache 由于其 .htaccess 配置而效果更好。
P.S.對于專用主機(jī)或VPS Nginx保持最好的選擇码荔。
2. 在功能限制的情況下漩勤,使用 Apache
????????Nginx 有一些非常重要的核心模塊。然而缩搅, Nginx 有一些功能限制锯七。
????????如果存在某些限制或需要使用 Nginx 不支持的額外模塊,則可能需要選擇 Apache 代替誉己。
何時(shí)選擇Nginx而不是Apache
1.快速靜態(tài)內(nèi)容處理
????????Nginx 在處理來自特定目錄的靜態(tài)文件方面可以執(zhí)行更好的工作眉尸。
????????此外,上游服務(wù)器進(jìn)程不會(huì)被阻止巨双,因?yàn)榇罅快o態(tài)內(nèi)容請求噪猾,因?yàn)?Nginx 可以同時(shí)處理它們。這顯著提高了后端服務(wù)器的整體性能筑累。
????????Nginx 不斷努力為用戶提供更好的體驗(yàn)袱蜡。2018年,它顯示出了顯著的增長慢宗。在 Nginx博客上瀏覽一下 2018年的主要要點(diǎn)坪蚁。
2.非常適合高流量網(wǎng)站
????????如果我們談?wù)摰乃俣群投嗌倏蛻艨梢苑?wù)在高負(fù)載,Nginx將永遠(yuǎn)閃耀作為贏家超過?Apache镜沽。
????????這使得 Nginx 具有顯著輕量級敏晤,非常適合服務(wù)器資源。這就是為什么大多數(shù) Web 開發(fā)人員更喜歡 Nginx 而不是 Apache缅茉。
????????特別是嘴脾,如今的電子商店雇傭了一位Magento開發(fā)者,他們知道如何在高流量的網(wǎng)站上工作,并擅長在Nginx上工作译打。
????????簡言之耗拓,當(dāng)涉及到服務(wù)一個(gè)有大量的流量的網(wǎng)站,Nginx是無可匹敵的奏司。
或者兩者同時(shí)使用
????????是的乔询,Apache和Nginx也可以成為朋友!通過將每個(gè)服務(wù)器的優(yōu)勢一起使用韵洋,可以使用它們哥谷。
????????您可以將 Apache 前面的 Nginx 用作服務(wù)器代理(如下圖所示)。這利用了 Nginx 的快速處理速度和同時(shí)建立大量連接的能力麻献。
????????對于靜態(tài)連接们妥,Nginx 會(huì)將文件快速服務(wù)到客戶端。對于動(dòng)態(tài)內(nèi)容勉吻,例如 Php 文件监婶,Nginx 反向代理服務(wù)器會(huì)將他們的請求代理到 Apache,然后 Apache 可以處理其結(jié)果并返回其呈現(xiàn)的頁面齿桃。
????????然后惑惶,Nginx 可以將最終內(nèi)容傳遞給客戶端。此外短纵,它允許您有一個(gè)非常實(shí)用的網(wǎng)絡(luò)服務(wù)器带污,以服務(wù)您的客戶(大量用戶)非常快香到。
最后
????????決定您將使用哪個(gè) Web 服務(wù)器鱼冀,Nginx 或 Apache 是設(shè)置網(wǎng)站的重要步驟。
????????這兩種解決方案都能夠處理不同的工作負(fù)載悠就,并與其他軟件合作千绪,以提供完整的 Web 堆棧。