Nginx核心流程及模塊介紹 1. Nginx簡介以及特點 Nginx簡介: Nginx (engine x) 是一個高性能的web伺服器和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器 俄羅斯程式員Igor Sysoev於2002年開始 Nginx是增長最快的Web伺服器,市場份額已達 ...
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進程
- 管理磁碟的緩存大小,超過預定值大小後最少使用數據將被刪除
框架模型:
image.png
框架模型流程:
image.png
框架模型流程:
image.pngimage.png
核心流程圖:
master初始化流程.pngimage.png
核心流程圖:
worker進程初始化流程.pngimage.png
http請求流程:
HTTP請求流程.pngimage.png
Upstream設計:
- 訪問第三方Server伺服器
- 底層HTTP通信非常完善
- 非同步非阻塞
- 上下游記憶體零拷貝,節省記憶體
- 支持自定義模塊開發
upstream流程:
upstream流程.pngimage.png
4. Nginx定製化模塊開發
Nginx的模塊化設計特點:
- 高度抽象的模塊介面
- 模塊介面非常簡單,具有很高的靈活性
- 配置模塊的設計
- 核心模塊介面的簡單化
- 多層次、多類別的模塊設計
核心模塊:
Nginx核心模塊.png
handler模塊:
- 接受來自客戶端的請求並構建響應頭和響應體。
handler.png
filter模塊:
-
過濾(filter)模塊是過濾響應頭和內容的模塊,可以對回覆的頭和內容進行處理。它的處理時間在獲取回覆內容之後,向用戶發送響應之前。
filter.png
upstream模塊:
-
使nginx跨越單機的限制,完成網路數據的接收、處理和轉發,純非同步的訪問後端服務。
upstream.png
load_balance:
-
負載均衡模塊,實現特定的演算法,在眾多的後端伺服器中,選擇一個伺服器出來作為某個請求的轉發伺服器。
load_balabce.png
ngx_lua模塊:
- 腳本語言
- 記憶體開銷小
- 運行速度快
- 強大的 Lua 協程
- 非阻塞
- 業務邏輯以自然邏輯書寫