1.什么是Nginx
Nginx來自俄羅斯的Igor Sysoev在為Rambler Media(http://www.rambler.ru/)工作期間,使用C語言開發了Nginx。Nginx作為Web服務器,一直為俄羅斯著名的門戶網站Rambler Media提供著出色、穩定的服務。
Igor Sysoev將Nginx的代碼開源,并且賦予其最自由的2-clause BSD-like license許可證。由于Nginx使用基于事件驅動的架構能夠并發處理百萬級別的TCP連接,高度模塊化的設計和自由的許可證使得擴展Nginx功能的第三方模塊層出不窮,而且優秀的設計帶來了極佳的穩定性,因此其作為Web服務器被廣泛應用到大流量的網站上,包括騰訊、新浪、網易、淘寶等訪問量巨大的網站。
Nginx是一個跨平臺的Web服務器,可運行在Linux、FreeBSD、Solaris、AIX、Mac OS、Windows等操作系統上,并且它還可以使用當前操作系統特有的一些高效API來提高自己的性能。
例如,對于高效處理大規模并發連接,它支持Linux上的epoll(epoll是Linux上處理大并發網絡連接的利器,9.6.1節中將會詳細說明epoll的工作原理)、Solaris上的event ports和FreeBSD上的kqueue等。
又如,對于Linux,Nginx支持其獨有的 sendfile系統調用,這個系統調用可以高效地把硬盤中的數據發送到網絡上(不需要先把硬盤數據復制到用戶態內存上再發送),這極大地減少了內核態與用戶態數據間的復制動作。
2.為什么選擇Nginx
為什么選擇Nginx?因為它具有以下特點:
(1)更快
這表現在兩個方面:一方面,在正常情況下,單次請求會得到更快的響應;另一方面,在高峰期(如有數以萬計的并發請求),Nginx可以比其他Web服務器更快地響應請求。
(2)高擴展性
Nginx的設計極具擴展性,它完全是由多個不同功能、不同層次、不同類型且耦合度極低的模塊組成。因此,當對某一個模塊修復Bug或進行升級時,可以專注于模塊自身,無須在意其他。而且在HTTP模塊中,還設計了HTTP過濾器模塊:一個正常的HTTP模塊在處理完請求后,會有一串HTTP過濾器模塊對請求的結果進行再處理。這樣,當我們開發一個新的HTTP模塊時,不但可以使用諸如HTTP核心模塊、events模塊、log模塊等不同層次或者不同類型的模塊,還可以原封不動地復用大量已有的HTTP過濾器模塊。這種低耦合度的優秀設計,造就了Nginx龐大的第三方模塊,當然,公開的第三方模塊也如官方發布的模塊一樣容易使用。
Nginx的模塊都是嵌入到二進制文件中執行的,無論官方發布的模塊還是第三方模塊都是如此。這使得第三方模塊一樣具備極其優秀的性能,充分利用Nginx的高并發特性,因此,許多高流量的網站都傾向于開發符合自己業務特性的定制模塊。 模塊化設計、較好的擴展性,編譯到Nginx,并隨Nginx啟動而啟動,但是Tengine支持模塊動態裝卸機制。
新聞熱點
疑難解答