Nginx-簡介

文章來自:http://ixdba.blog.51cto.com/2895551/778462



一、什麼是Nginx
相信很多讀者都對Apache非常熟悉,與Apache類似,Nginx是一款高性能的HTTP和反向代理服務器軟件,也是一個 IMAP/POP3/SMTP 代理服務器。Nginx(發音是“engine x”)由俄羅斯的程序設計師Igor Sysoev所開發(Igor將源代碼以類BSD許可證的形式發佈),可以運行在UNIX,GNU/Linux,BSD,Mac OS X, Solaris, 以及 Microsoft Windows等操作系統中。隨着Nginx在很多大型網站的穩定運行,其穩定、高效的特性逐漸被越來越多的用戶認可。
二、爲什麼要選擇Nginx
1、Nginx與Apache的異同
Nginx和Apache一樣,都是一個HTTP服務器軟件,功能實現上都採用模塊化結構設計,都支持通用的語言接口,如PHP、Perl、Python等,同時還支持正、反向代理,虛擬主機,URL重寫,壓縮傳輸,SSL加密傳輸等。它們之間最大的差別是Apache處理速度很慢,且佔用很多內存資源,而Nginx卻恰恰相反;在功能實現上,Apache的所有模塊都支持動、靜態編譯,而Nginx模塊都是靜態編譯的,同時,Apache對Fcgi支持不好,而Nginx對Fcgi的支持非常的好;最重要的是,在處理連接方式上,Nginx支持epoll,而Apache卻不支持;在大小上,Nginx安裝包僅僅有幾百K,和Nginx比起來Apache絕對是龐然大物。在瞭解了Nginx和Apache之間的異同點後基本知道了Nginx作爲HTTP服務器的優勢所在。
2、 選擇Nginx的優勢所在
通過上面的簡單介紹,Nginx作爲HTTP服務器的優勢是顯而易見的,它有很多其它Web服務器無法比擬的性能和優勢:
作爲Web服務器,nginx處理靜態文件、索引文件以及自動索引效率非常高。
作爲代理服務器,Nginx可以實現無緩存的反向代理加速,提高網站運行速度。
作爲負載均衡服務器,Nginx既可以在內部直接支持Rails和PHP,也可以支持HTTP代理服務器,對外進行服務。同時支持簡單的容錯和利用算法進行負載均衡。
在性能方面,Nginx是專門爲性能優化而開發的,在實現上非常注重效率。它採用內核Poll模型,可以支持更多的併發連接,最大可以支持對50 000個併發連接數的響應,而且佔用很低的內存資源。
在穩定性方面,Nginx採取了分階段資源分配技術,使得對CPU與內存的佔用率非常低。Nginx官方表示Nginx保持10 000個沒有活動的連接,這些連接只佔2.5M內存,因此,類似DOS這樣的***對Nginx來說基本上是沒有任何作用的。
在高可用性方面,Nginx支持熱部署,啓動速度特別迅速,因此可以在不間斷服務的情況下,對軟件版本或者配置進行升級,即使運行數月也無需重新啓動,幾乎可以做到7×24小時的不間斷運行。
3、Nginx的模塊與工作原理
Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啓動不同的模塊去完成相應的工作。
Nginx的模塊從結構上分爲核心模塊、基礎模塊和第三方模塊, HTTP模塊、EVENT模塊和MAIL模塊等屬於核心模塊,HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬於基本模塊,而HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊屬於第三方模塊,用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有了這麼多模塊的支撐,Nginx的功能纔會如此強大。
Nginx的模塊從功能上分爲三類,分別是:
(1) Handlers(處理器模塊)。此類模塊直接處理請求,並進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個。
(2) Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx輸出。
(3) Proxies (代理類模塊)。就是Nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務比如fastcgi等操作交互,實現服務代理和負載均衡等功能。
下圖展示了Nginx的模塊下一次常規的HTTP請求和響應的過程。

105912289.png


在工作方式上,Nginx分爲單工作進程和多工作進程兩種模式。在單工作進程模式下,除主進程外,還有一個工作進程,工作進程是單線程的;在多工作進程模式下,每個工作進程包含多個線程。Nginx默認爲單工作進程模式。
Nginx的模塊直接被編譯進Nginx,因此屬於靜態編譯方式。啓動Nginx後,Nginx的模塊被自動加載,不像在Apache一樣,首先將模塊編譯爲一個so文件,然後在配置文件中指定是否進行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章