Nginx人氣的迅猛提升與Apache在Web服務器市場份額領域的穩步下降不禁引發諸多猜測,很多從業者認為這種趨勢將使新部署流程中的方案選擇變得更為清晰。事實上,我最近正好在忙一項規模較大的服務器設置任務,并且最終選擇了Nginx作為自己的得力工具——但我的選擇是否正確呢?
就目前的形勢來看,互聯網與Apache之間的甜蜜感情似乎已經破碎,這意味著在過去十幾年中始終統治這片大陸的王者終于開始顯露疲態。盡管Apache仍然支撐著全球大部分網站,但在過去幾年中Nginx(engine-x)正不斷蠶食著前者的市場份額。
憑借著其事件驅動設計,Nginx已經超越了Apache的過程驅動設計、成為更適合當前計算機硬件狀況的高人氣解決方案。從結果角度講,特定情況下Nginx能夠在同樣的硬件之上實現超越Apache的并發客戶支持數量與更高的數據吞吐能力。但大家不應該單純將此作為評判標準,我們還應該考慮自己到底在利用服務器設備做些什么。
Nginx在處理靜態內容時擁有優勢,其執行效率比Apache更高,但Apache的靜態內容處理速度同樣不慢。靜態內容對于任何一種Web服務器來說都是最簡單的處理項目,因此高流量站點往往傾向于利用更加復雜的后端系統來生成靜態內容,從而更快且更全面地滿足用戶需求。不過PHP的介入給這一流程帶來了更多難題。
最重要的問題在于,當我們選擇一套Web服務器設置方案時,最重要的問題是搞清楚自己會如何使用這臺服務器。如果大家只需要用它來支持單一站點,而且這臺服務器中運行著一套專門充當web服務器的獨立數據庫系統,那么選擇Nginx無疑更加明智——畢竟Nginx在流量處理能力上要高于Apache。除此之外,Nginx本身提供配置功能,從而在必要時以比Apache更簡單的方式實現規模擴展,這又是另一項優勢。不過如果大家打算在這臺服務器中托管多個站點以及大量應用程序,例如多個Wordpress站點,那么答案就沒那么明確了。在這種情況下,性能瓶頸可能更多來自PHP而非web服務器的具體選擇。
面對這種情況,大家可能會這樣考慮:好吧,如果PHP對于這兩類web服務器都是難題,而且Nginx在處理靜態文件時速度更快,為什么不直接選擇Nginx呢?之所以令人糾結,是因為Apache擁有屬于自己的獨特優勢。這是一套成熟的平臺,而且在Linux領域擁有相當廣泛的支持方案。很多在Apache中可以直接使用的功能,在Nginx這邊也許需要大家經過認真研究與配置。不少控制平臺與自動化配置工具目前在Nginx當中還不可用,大家的技術團隊可能也更熟悉Apache并擅長診斷其中出現的問題。這些都是需要認真考量的重要優勢。
在大多數情況下,Nginx所帶來的性能提升其實都可以忽略不計。除非需要托管數以十億計的海量站點,否則流量優勢基本上很難得到體現。大家應該將實際要求與現有技能儲備作為主要參考因素。如果我們希望在自己的個人博客上使用一項新技術作為學習實踐,那么選擇任何一套喜歡的平臺都是沒有問題的。如果大家要設置的是一臺托管服務器或者關鍵性業務應用程序,那么審視選項時則最好慎重一些。僅僅出于速度的考慮就將所有工作一股腦交給Nginx,這樣的判斷方式顯然很容易引發嚴重后果。
最后,最好的處理策略在于將不同技術結合起來,而非簡單依賴單一一種web服務器平臺。需要處理大量流量的站點要求在架構中引入多層機制,而web服務器僅僅是這套綜合性體系當中的一小部分。多數普通站點應該優先考慮技術人員更熟悉的解決方案,并對需要重視的特定類型性能表現作出橫向比較。Apache仍然是一套出色的引擎,而且保持著較高的人氣。隨著不斷發展與成熟,Nginx也將逐步完善、甚至在未來五年內一舉超越Apache。
要在二者之間作出選擇,正確的答案是視情況而定。如果大家打算托管Wordpress這類非常常見的站點場景,我認為這兩套方案都能帶來卓越的表現。利用Nginx對站點內容進行緩存處理(建議大家這樣做)能夠實現性能改進,但這也意味著需要犧牲Apache在開箱即用、兼容性以及低難度學習曲線方面的優勢。如果大家需要運行PHP應用程序,那么使用APC等操作碼緩存機制帶來的提升要遠高于在兩種web服務器之間糾結。我的觀點是,Nginx并不是一味包治百病的靈藥。僅僅因為Apache年事已高、不像新生代Nginx那么酷而輕易作出選擇往往會最終令自己陷入困境。
英文:http://www.itworld.com/consumerization-it/421347/choosing-linux-web-server-nginx-vs-apache?source=ITWNLE_nlt_today_2014-06-03