Nginx - 原理机制
一、 概念
Nginx——Ngine X,是一款自由的、開源的、高性能HTTP服務器和反向代理服務器;也是一個IMAP、POP3、SMTP代理服務器;也就是說Nginx本身就可以托管網站(類似于Tomcat一樣),進行Http服務處理,也可以作為反向代理服務器使用。
Nginx 解決了服務器的C10K(就是在一秒之內連接客戶端的數目為10k即1萬)問題。它的設計不像傳統的服務器那樣使用線程處理請求,而是一個更加高級的機制—事件驅動機制,是一種異步事件驅動結構。
雖然目前Nginx的份額在市場上只占很少部分,但是其高性能和低消耗內存的結構,使得其越來越普遍,典型的一個應用就是我們可以使用Nginx作為反向代理進行網站的負載均衡器。例如:Wordpress、GitHub等知名的網站都使用到了Nginx。
?
二、 正向代理和反向代理
首先,代理服務器一般指局域網內部的機器通過代理服務器發送請求到互聯網上的服務器,代理服務器一般作用在客戶端。我們的客戶端在進行FQ操作的時候,我們使用的正是正向代理,通過正向代理的方式,在我們的客戶端運行一個軟件,將我們的HTTP請求轉發到其他不同的服務器端,實現請求的分發。
反向代理服務器作用在服務器端,它在服務器端接收客戶端的請求,然后將請求分發給具體的服務器進行處理,然后再將服務器的相應結果反饋給客戶端。Nginx就是一個反向代理服務器軟件。
從上圖可以看出:客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口。?
反向代理正好與正向代理相反,對于客戶端而言代理服務器就像是原始服務器,并且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始服務器)轉交請求,并將獲得的內容返回給客戶端。
?
三、服務器的類型:
1、Web服務器:提供Http的訪問,例如Nginx、Apache、IIS等,雖然Tomcat也能夠實現,但這并不是他的主要功能,而且性能也遠不如專門的Web服務器;?
2、應用程序服務器:能夠用于應用程序的運行;?
3、代理服務器:代理服務器通常是客戶端訪問的一種行為,在整個客戶端訪問服務器的過程中有著重要的作用;?
4、反向代理?
5、后臺服務器?
6、CDN緩存服務器:它是緩存服務器的角色,而且是反向代理的應用,在網站部署的時候,他算是一種策略,對于遠距離訪問的解決方案。
?
四、 Nginx的特點
? ? ? ?? 跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。?
? 配置異常簡單:非常的簡單,易上手。?
? 非阻塞、高并發連接:數據復制時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬并發連接,實際生產中能跑2~3萬并發連接數(得益于Nginx采用了最新的epoll事件處理模型(消息隊列)。?
? Nginx代理和后端Web服務器間無需長連接;?
? Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到后端Web服務器,極大減輕后端Web服務器的壓力。?
? 發送響應報文時,是邊接收來自后端Web服務器的數據,邊發送給客戶端。?
? 網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。?
? 支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,并及時返回錯誤的請求重新提交到其它節點上。?
? 采用Master/worker多進程工作模式?
? 此外還有內存消耗小、成本低廉(比F5硬件負載均衡器廉價太多)、節省帶寬、穩定性高等特點。
?
五、Nginx的基本功能
Nginx的功能包括基本HTTP功能和擴展功能。和Apache服務器一樣,Nginx服務器為了提供更多的功能并且能夠有效地擴展這些功能。每一個模塊都提供了一個功能,通過編譯這些功能模塊來實現功能的擴展。
1、基本HTTP功能
a)提供靜態文件和index文件,處理靜態文件,索引文件以及自動索引,打開文件描述符緩存;
b)使用緩存加速反向代理,反向代理加速(無緩存),簡單的負載均衡和容錯;
c)使用緩存機制加速遠程FastCGI,簡單的負載均衡和容錯;
d)模塊化的結構。過濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求并發處理;
e)支持SSL 和 TLS SNI 支持;
f)IMAP/POP3代理服務功能;
g)使用外部 HTTP 認證服務器重定向用戶到 IMAP/POP3 后端;
h)使用外部 HTTP 認證服務器認證用戶后連接重定向到內部的 SMTP 后端。
2、其他HTTP功能
a)基于名稱和基于IP的虛擬服務器;
b)支持Keep-alive和管道連接;
c)靈活的配置和重新配置、在線升級的時候不用中斷客戶訪問的處理;
d)訪問日志的格式,緩存日志寫入和快速日志輪循;
e)3xx-5xx錯誤代碼重定向;
f)速度限制
?
六、Nginx的基本模塊
Nginx的核心模塊包括內核模塊和事件驅動模塊,即:CoreModule和EventsModule;另外還有第三方模塊 HTTP內核模塊,HttpCoreModule,它是Nginx服務器的核心模塊。
CoreModule和EventsModule模塊的配置相對于HttpCoreModule會少一些,但是它們的配置將會影響系統的性能,而非功能上的差異。
1、CoreModule用于控制Nginx服務器的基本功能;?
2、EventsModule用于控制Nginx如何處理連接。該模塊的指令的一些參數會對應用系統的性能產生重要的影響;?
3、HttpCoreModule提供HTTP訪問Nginx服務器,該模塊是不能缺少的。
?
七、 內部進程模型
Nginx是以多進程的方式來工作的,當然Nginx也是支持多線程的方式的,只是我們主流的方式還是多進程的方式,也是Nginx的默認方式。Nginx采用多進程的方式有諸多好處。
Nginx在啟動后,會有一個master進程和多個worker進程。master進程主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控 worker進程的運行狀態,當worker進程退出后(異常情況下),會自動重新啟動新的worker進程。而基本的網絡事件,則是放在worker進程中來處理了。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。worker進程的個數是可以設置的,一般我們會設置與機器CPU核數一致,這里面的原因與Nginx的進程模型以及事件處理模型是分不開的。
?
八、 處理請求
首先,Nginx在啟動時,會解析配置文件,得到需要監聽的端口與IP地址,然后在Nginx的master進程里面,先初始化好這個監控的socket(創建socket,設置addrreuse等選項,綁定到指定的IP地址端口,再listen),然后再fork(一個現有進程可以調用fork函數創建一個新進程。由fork創建的新進程被稱為子進程 )出多個子進程出來,然后子進程會競爭accept新的連接。?
此時,客戶端就可以向Nginx發起連接了。當客戶端與Nginx進行三次握手,與Nginx建立好一個連接后,某一個子進程會accept成功,得到這個建立好的連接的socket,然后創建Nginx對連接的封裝,即ngx_connection_t結構體。?
接著,設置讀寫事件處理函數并添加讀寫事件來與客戶端進行數據的交換。最后,Nginx或客戶端來主動關掉連接,到此,一個連接就壽終正寢了。
?
九、 實際應用
由于Nginx是由俄羅斯人寫的,所以,Nginx 已經在俄羅斯最大的門戶網站── Rambler Media(www.rambler.ru)上運行了3年時間,同時俄羅斯超過20%的虛擬主機平臺采用Nginx作為反向代理服務器。
在國內,已經有淘寶、新浪博客、新浪播客、網易新聞、六間房、56.com、Discuz!、水木社區、豆瓣、YUPOO、海內、迅雷在線等多家網站使用 Nginx 作為Web服務器或反向代理服務器。
?
總結
以上是生活随笔為你收集整理的Nginx - 原理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 包含对流环热,热流边界,等温边界的稳态热
- 下一篇: Nginx工作原理和优化、漏洞