如何選擇Linux Web服務器:Nginx對陣Apache
Nginx人氣的(de)(de)迅猛(meng)提升與Apache在Web服務器(qi)市(shi)場份額(e)領域的(de)(de)穩步下(xia)降不(bu)禁引(yin)發諸多(duo)猜測,很(hen)多(duo)從業者認為這種(zhong)趨勢將使新部署流程中的(de)(de)方案選(xuan)(xuan)(xuan) 擇變得(de)更為清晰。事(shi)實上(shang),我最(zui)(zui)近正(zheng)好(hao)在忙一項規模(mo)較(jiao)大的(de)(de)服務器(qi)設置(zhi)任務,并且最(zui)(zui)終選(xuan)(xuan)(xuan)擇了Nginx作為自(zi)己的(de)(de)得(de)力工具(ju)——但我的(de)(de)選(xuan)(xuan)(xuan)擇是(shi)否正(zheng)確呢?
就目前的(de)(de)形勢來看,互聯網(wang)與Apache之間的(de)(de)甜蜜感情似乎已經破(po)碎,這意味著(zhu)在(zai)過去十幾年(nian)中始終統(tong)治這片大陸的(de)(de)王者終于開始顯露疲態。盡管Apache仍然支撐(cheng)著(zhu)全球大部(bu)分(fen)網(wang)站,但在(zai)過去幾年(nian)中Nginx(engine-x)正不(bu)斷蠶(can)食(shi)著(zhu)前者的(de)(de)市場份額。
憑(ping)借著其事件驅(qu)動設計,Nginx已經(jing)超越了(le)Apache的過(guo)程(cheng)驅(qu)動設計、成為更(geng)適合當前計算機硬件狀況的高(gao)人氣解決方案。從(cong)結果角度講,特定情(qing)況 下Nginx能夠在同樣的硬件之上實(shi)現(xian)超越Apache的并發客戶(hu)支持數量與更(geng)高(gao)的數據吞吐能力。但大家不應該(gai)單(dan)純將此(ci)作為評判標準(zhun),我們還應該(gai)考(kao)慮(lv)自己(ji) 到底(di)在利(li)用(yong)服(fu)務器(qi)設備做些什么。
Nginx在處(chu)理靜態(tai)內(nei)(nei)容(rong)時(shi)擁有優勢,其執行效(xiao)率比Apache更高,但(dan)Apache的靜態(tai)內(nei)(nei)容(rong)處(chu)理速度同樣不慢(man)。靜態(tai)內(nei)(nei)容(rong)對(dui)于任何一(yi)種Web服務 器(qi)來說都是最簡單的處(chu)理項目,因此高流(liu)量站點往往傾向于利用更加復雜(za)的后端系統來生(sheng)成靜態(tai)內(nei)(nei)容(rong),從而更快(kuai)且更全面地滿足(zu)用戶需求。不過PHP的介(jie)入給(gei)這一(yi) 流(liu)程帶來了更多難題。
最(zui)重要(yao)的問題(ti)(ti)在于(yu),當(dang)我們選(xuan)擇一套Web服務(wu)(wu)器設置方案時,最(zui)重要(yao)的問題(ti)(ti)是(shi)(shi)搞清楚自己(ji)會(hui)如何使(shi)用這(zhe)臺服務(wu)(wu)器。如果大家(jia)只需要(yao)用它來支持單(dan)一站點(dian)(dian),而(er) 且這(zhe)臺服務(wu)(wu)器中運行著一套專門充當(dang)web服務(wu)(wu)器的獨立數據庫系(xi)統,那(nei)么(me)選(xuan)擇Nginx無疑更加(jia)明智——畢竟Nginx在流量處理能(neng)力上要(yao)高于(yu) Apache。除此之外,Nginx本身(shen)提(ti)供(gong)配置功(gong)能(neng),從而(er)在必要(yao)時以比Apache更簡單(dan)的方式實現規模擴(kuo)展,這(zhe)又是(shi)(shi)另一項優勢。不過如果大家(jia)打算(suan)在這(zhe) 臺服務(wu)(wu)器中托(tuo)管(guan)多個(ge)站點(dian)(dian)以及(ji)大量應(ying)用程(cheng)序,例(li)如多個(ge)Wordpress站點(dian)(dian),那(nei)么(me)答案就沒那(nei)么(me)明確(que)了。在這(zhe)種情(qing)況下(xia),性能(neng)瓶頸可(ke)能(neng)更多來自PHP而(er)非 web服務(wu)(wu)器的具體選(xuan)擇。
面對這(zhe)(zhe)種情況,大(da)家(jia)可(ke)能(neng)會(hui)這(zhe)(zhe)樣考慮(lv):好(hao)吧,如果PHP對于(yu)(yu)這(zhe)(zhe)兩類web服務器都(dou)是(shi)難題,而(er)且Nginx在處理(li)靜態文件時速度更快(kuai),為什么不直接選擇 Nginx呢?之所以(yi)令人糾結,是(shi)因為Apache擁有屬于(yu)(yu)自己的(de)(de)獨(du)特優勢(shi)(shi)。這(zhe)(zhe)是(shi)一(yi)套成熟的(de)(de)平(ping)臺(tai),而(er)且在Linux領(ling)域(yu)擁有相(xiang)當廣泛的(de)(de)支持方(fang)案。很多在 Apache中(zhong)可(ke)以(yi)直接使用(yong)的(de)(de)功(gong)能(neng),在Nginx這(zhe)(zhe)邊也許(xu)需要(yao)大(da)家(jia)經(jing)過認真研究與配(pei)置。不少控制平(ping)臺(tai)與自動化配(pei)置工具目(mu)前在Nginx當中(zhong)還不可(ke)用(yong),大(da)家(jia) 的(de)(de)技術團隊(dui)可(ke)能(neng)也更熟悉(xi)Apache并擅長診斷(duan)其(qi)中(zhong)出現的(de)(de)問題。這(zhe)(zhe)些都(dou)是(shi)需要(yao)認真考量的(de)(de)重要(yao)優勢(shi)(shi)。
在大多數情況下,Nginx所(suo)帶來的(de)(de)性(xing)能提升其實都可(ke)以忽略(lve)不計。除(chu)非(fei)需要(yao)(yao)托管(guan)數以十(shi)億計的(de)(de)海量站(zhan)點,否則流量優勢基本上(shang)很難得到體現。大家應(ying)該將 實際要(yao)(yao)求與現有(you)技能儲備作(zuo)為主要(yao)(yao)參考因素。如果我們(men)希望在自己(ji)的(de)(de)個(ge)人(ren)博客上(shang)使用一(yi)(yi)(yi)項新技術作(zuo)為學(xue)習實踐,那(nei)么選擇任何(he)一(yi)(yi)(yi)套(tao)喜歡的(de)(de)平臺都是(shi)沒有(you)問題的(de)(de)。如果 大家要(yao)(yao)設置(zhi)的(de)(de)是(shi)一(yi)(yi)(yi)臺托管(guan)服務(wu)器或者關(guan)鍵(jian)性(xing)業務(wu)應(ying)用程序,那(nei)么審視選項時則最好慎重一(yi)(yi)(yi)些。僅僅出于速度的(de)(de)考慮(lv)就將所(suo)有(you)工作(zuo)一(yi)(yi)(yi)股(gu)腦交給(gei)Nginx,這樣(yang)的(de)(de)判斷 方式顯(xian)然很容易引發嚴重后(hou)果。
最后,最好的(de)(de)(de)處(chu)理策略在于將(jiang)不(bu)同技術(shu)結合起來(lai),而非簡單依(yi)賴單一一種web服務器平臺。需要(yao)處(chu)理大量流量的(de)(de)(de)站點要(yao)求(qiu)在架構中引入多(duo)層機制,而web 服務器僅僅是這套(tao)綜(zong)合性體系當中的(de)(de)(de)一小部分。多(duo)數(shu)普通站點應該優先(xian)考(kao)慮(lv)技術(shu)人員(yuan)更熟(shu)悉(xi)的(de)(de)(de)解決(jue)方(fang)案,并對需要(yao)重(zhong)視(shi)的(de)(de)(de)特定類型性能表現作出橫向(xiang)比較。 Apache仍然是一套(tao)出色的(de)(de)(de)引擎,而且保持著較高(gao)的(de)(de)(de)人氣。隨著不(bu)斷發展與成熟(shu),Nginx也將(jiang)逐步完善、甚(shen)至(zhi)在未來(lai)五年內一舉超越Apache。
要(yao)在(zai)二者之間(jian)作出選(xuan)擇,正確(que)的(de)答案是視(shi)情況(kuang)而定。如(ru)果(guo)(guo)大家打算托(tuo)管(guan)Wordpress這(zhe)(zhe)類非(fei)常(chang)常(chang)見的(de)站點場(chang)景,我(wo)認為這(zhe)(zhe)兩套方案都能帶(dai)來(lai)卓越的(de)表現(xian)。利用(yong)(yong)Nginx對站點內容進(jin)行緩存處理(建(jian)議(yi)大家這(zhe)(zhe)樣做(zuo))能夠實現(xian)性能改(gai)進(jin),但(dan)這(zhe)(zhe)也意味(wei)著需(xu)要(yao)犧牲(sheng)Apache在(zai)開箱(xiang)即用(yong)(yong)、兼(jian)容性以及低(di)難度學習曲線 方面的(de)優勢(shi)。如(ru)果(guo)(guo)大家需(xu)要(yao)運(yun)行PHP應用(yong)(yong)程序,那么使(shi)用(yong)(yong)APC等操作碼緩存機制帶(dai)來(lai)的(de)提升要(yao)遠(yuan)高(gao)于(yu)在(zai)兩種(zhong)web服(fu)務(wu)器(qi)之間(jian)糾結。我(wo)的(de)觀點是,Nginx并不是一味(wei)包治百病(bing)的(de)靈藥(yao)。僅僅因(yin)為Apache年(nian)事(shi)已高(gao)、不像新生(sheng)代Nginx那么酷而輕易作出選(xuan)擇往往會最(zui)終令(ling)自己陷入(ru)困境。
英文原文: