nginx 架構及核心流程及模組介紹
1. Nginx簡介以及特點
Nginx簡介:
Nginx (engine x) 是一個高效能的web伺服器和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器
- 俄羅斯程式設計師Igor Sysoev於2002年開始
- Nginx是增長最快的Web伺服器,市場份額已達33.3%
- 全球使用量排名第二2011年成立商業公司
Nginx社群分支:
- Openresty作者@agentzh(章宜春)開發的,最大特點是引入了ngx_lua模組,支援使用lua開發外掛,並且集合了很多豐富的模組,以及lua庫。
- Tengine主要是淘寶團隊開發。特點是融入了因淘寶自身的一些業務帶來的新功能。
- Nginx官方版本,更新迭代比較快,並且提供免費版本和商業版本。
Nginx原始碼結構:
-
程式碼量大約11萬行C程式碼
-
原始碼目錄結構
-
core (主幹和基礎設定)
-
event (事件驅動模型和不同的IO複用模組)
-
http (HTTP伺服器和模組)
-
mail (郵件代理伺服器和模組)
-
os (作業系統相關的實現)
-
misc (雜項)
Nginx特點:
-
反向代理,負載均衡器
-
高可靠性、單master多worker模式
-
高可擴充套件性、高度模組化
-
非阻塞
-
事件驅動
-
低記憶體消耗
-
熱部署
2. Nginx應用場景
場景如下:
-
靜態檔案伺服器
-
反向代理,負載均衡
-
安全防禦
-
智慧路由(企業級灰度測試、地圖POI一鍵切流)
-
灰度釋出
-
靜態化
-
訊息推送
-
圖片實時壓縮
-
防盜鏈
3. Nginx框架模型及流程介紹
程序元件角色:
-
master程序
-
監視工作程序的狀態
-
當工作程序死掉後重啟一個新的
-
處理訊號和通知工作程序
-
worker程序
-
處理客戶端請求
-
從主程序處獲得訊號做相應的事情
-
cache loader程序
-
載入快取索引檔案資訊,然後退出
-
cache manager程序
-
管理磁碟的快取大小,超過預定值大小後最少使用資料將被刪除
框架模型:

框架模型流程:

框架模型流程:

核心流程圖:

核心流程圖:

http請求流程:

Upstream設計:
-
訪問第三方Server伺服器
-
底層HTTP通訊非常完善
-
非同步非阻塞
-
上下游記憶體零拷貝,節省記憶體
-
支援自定義模組開發
upstream流程:

4. Nginx定製化模組開發
Nginx的模組化設計特點:
-
高度抽象的模組介面
-
模組介面非常簡單,具有很高的靈活性
-
配置模組的設計
-
核心模組介面的簡單化
-
多層次、多類別的模組設計
核心模組:

handler模組:
- 接受來自客戶端的請求並構建響應頭和響應體。

filter模組:
- 過濾(filter)模組是過濾響應頭和內容的模組,可以對回覆的頭和內容進行處理。它的處理時間在獲取回覆內容之後,向用戶傳送響應之前。

upstream模組:
- 使nginx跨越單機的限制,完成網路資料的接收、處理和轉發,純非同步的訪問後端服務。

load_balance:
- 負載均衡模組,實現特定的演算法,在眾多的後端伺服器中,選擇一個伺服器出來作為某個請求的轉發伺服器。

ngx_lua模組:
-
指令碼語言
-
記憶體開銷小
-
執行速度快
-
強大的 Lua 協程
-
非阻塞
-
業務邏輯以自然邏輯書寫