nginx 的模塊化體系結構
Nginx 的內部結構是由核心部分和一系列的功能模塊所組成。? ? ? ? ? ? ? ( 推薦學習:nginx使用?)
這樣劃分是為了使得每個模塊的功能相對簡單,便于開發,同時也便于對系統進行功能擴展。為了便于描述,下文中我們將使用 Nginx core 來稱呼 Nginx 的核心功能部分。
Nginx 提供了 Web 服務器的基礎功能,同時提供了 Web 服務反向代理,Email 服務反向代理功能。
Nginx core實現了底層的通訊協議,為其他模塊和 Nginx 進程構建了基本的運行時環境,并且構建了其他各模塊的協作基礎。除此之外,或者說大部分與協議相關的,或者應用相關的功能都是在這些模塊中所實現的。
模塊概述
Nginx 將各功能模塊組織成一條鏈,當有請求到達的時候,請求依次經過這條鏈上的部分或者全部模塊,進行處理。每個模塊實現特定的功能。
例如,實現對請求解壓縮的模塊,實現 SSI 的模塊,實現與上游服務器進行通訊的模塊,實現與 FastCGI 服務進行通訊的模塊。
有兩個模塊比較特殊,他們居于 Nginx core 和各功能模塊的中間。這兩個模塊就是 http 模塊和 mail 模塊。
這 2 個模塊在 Nginx core 之上實現了另外一層抽象,處理與 HTTP 協議和 Email 相關協議(SMTP/POP3/IMAP)有關的事件,并且確保這些事件能被以正確的順序調用其他的一些功能模塊。
目前 HTTP 協議是被實現在 http 模塊中的,但是有可能將來被剝離到一個單獨的模塊中,以擴展 Nginx 支持 SPDY 協議。
模塊的分類
Nginx 的模塊根據其功能基本上可以分為以下幾種類型:
event module: 搭建了獨立于操作系統的事件處理機制的框架,及提供了各具體事件的處理。包括 ngx_events_module, ngx_event_core_module和ngx_epoll_module 等。Nginx 具體使用何種事件處理模塊,這依賴于具體的操作系統和編譯選項。
phase handler: 此類型的模塊也被直接稱為 handler 模塊。主要負責處理客戶端請求并產生待響應內容,比如 ngx_http_static_module 模塊,負責客戶端的靜態頁面請求處理并將對應的磁盤文件準備為響應內容輸出。
output filter: 也稱為 filter 模塊,主要是負責對輸出的內容進行處理,可以對輸出進行修改。例如,可以實現對輸出的所有 html 頁面增加預定義的 footbar 一類的工作,或者對輸出的圖片的 URL 進行替換之類的工作。
upstream: upstream 模塊實現反向代理的功能,將真正的請求轉發到后端服務器上,并從后端服務器上讀取響應,發回客戶端。upstream 模塊是一種特殊的 handler,只不過響應內容不是真正由自己產生的,而是從后端服務器上讀取的。
load-balancer: 負載均衡模塊,實現特定的算法,在眾多的后端服務器中,選擇一個服務器出來作為某個請求的轉發服務器。