文章目錄
- 前言
- 一、簡介
- 二、工作原理
- 1. 多進程架構
- 2. 事件驅動模型
- 3. 模塊化設計
- 三、工作流程
- 1. 啟動階段
- 2. 等待連接
- 3. 請求處理階段
- 4. 響應構造與輸出
- 5. 連接關閉
前言
Nginx
?
Nginx(發音為“Engine-X”)是一款高性能的開源Web服務器軟件,同時也廣泛用作反向代理、負載均衡器和HTTP緩存服務器。
一、簡介
Nginx(發音為“Engine-X”)是一款高性能的開源Web服務器軟件,同時也廣泛用作反向代理、負載均衡器和HTTP緩存服務器。
Nginx由Igor Sysoev于2004年首次發布,設計目標是解決傳統Web服務器(如Apache)在高并發場景下的性能瓶頸。
Nginx以其異步非阻塞的事件驅動架構著稱,能夠高效處理數以萬計的并發連接,廣泛應用于現代互聯網架構中。
二、工作原理
Nginx 的核心是 事件驅動 + 異步非阻塞 IO,其運行機制遵循以下原則。
Nginx 的整體架構,可以分為三大核心部分:
1. 多進程架構
Master-Worker 多進程模型:啟動后由一個 Master 進程,統一管理多個 Worker 子進程。
-
Master 進程:負責讀取配置、管理 Worker 進程、響應控制命令(如 reload、stop);
-
Worker 進程:負責處理客戶端請求,一個 Worker 可同時處理多個連接;
-
每個 Worker 獨立處理請求,互不干擾,采用 epoll 事件機制監聽連接;
2. 事件驅動模型
基于操作系統的高效 IO 事件通知機制(Linux 下為 epoll);
利用事件循環處理連接的可讀、可寫、超時等事件;
內部采用 Reactor 模式, 進行模塊解耦與異步調度。
3. 模塊化設計
核心功能通過模塊加載實現,分為:
-
核心模塊(如 http、event、mail);
-
功能模塊(如 proxy、rewrite、gzip、ssl);
-
第三方模塊(如 Lua、RTMP、OpenResty 插件)。
三、工作流程
Nginx工作流程,如下圖所示:
1. 啟動階段
- Master 進程加載配置文件;
- 初始化所需資源(監聽端口、緩存目錄、日志文件等);
- 派生多個 Worker 進程。
2. 等待連接
- Worker 進程監聽事件循環(如 epoll_wait);
- 當有客戶端連接時,從監聽套接字 accept 新連接。
3. 請求處理階段
- 讀取并解析 HTTP 請求報文;
- 匹配 location 配置;
- 根據配置決定請求處理方式(如靜態文件、本地 FastCGI、反向代理到上游等);
- 可進行 rewrite、重定向、認證、限速、緩存、壓縮等處理。
4. 響應構造與輸出
- 將響應數據寫入緩存、或直接讀取文件;
- 利用 sendfile 零拷貝輸出到網絡;
- 支持響應緩存控制(如 Cache-Control、ETag)和 gzip 壓縮。
5. 連接關閉
- 根據配置決定是否開啟 keepalive 長連接;
- 釋放資源、關閉連接或繼續復用連接。
本文的引用僅限自我學習如有侵權,請聯系作者刪除。
參考知識
Nginx工作原理最全詳解(圖文全面總結)