Nginx 的模塊化體系結(jié)構(gòu)

2022-03-23 15:38 更新

Nginx 的內(nèi)部結(jié)構(gòu)是由核心部分和一系列的功能模塊所組成。這樣劃分是為了使得每個模塊的功能相對簡單,便于開發(fā),同時也便于對系統(tǒng)進行功能擴展。為了便于描述,下文中我們將使用 Nginx core 來稱呼 Nginx 的核心功能部分。

Nginx 提供了 Web 服務器的基礎(chǔ)功能,同時提供了 Web 服務反向代理,Email 服務反向代理功能。Nginx core實現(xiàn)了底層的通訊協(xié)議,為其他模塊和 Nginx 進程構(gòu)建了基本的運行時環(huán)境,并且構(gòu)建了其他各模塊的協(xié)作基礎(chǔ)。除此之外,或者說大部分與協(xié)議相關(guān)的,或者應用相關(guān)的功能都是在這些模塊中所實現(xiàn)的。

模塊概述

Nginx 將各功能模塊組織成一條鏈,當有請求到達的時候,請求依次經(jīng)過這條鏈上的部分或者全部模塊,進行處理。每個模塊實現(xiàn)特定的功能。例如,實現(xiàn)對請求解壓縮的模塊,實現(xiàn) SSI 的模塊,實現(xiàn)與上游服務器進行通訊的模塊,實現(xiàn)與 FastCGI 服務進行通訊的模塊。

有兩個模塊比較特殊,他們居于 Nginx core 和各功能模塊的中間。這兩個模塊就是 http 模塊和 mail 模塊。這 2 個模塊在 Nginx core 之上實現(xiàn)了另外一層抽象,處理與 HTTP 協(xié)議和 Email 相關(guān)協(xié)議(SMTP/POP3/IMAP)有關(guān)的事件,并且確保這些事件能被以正確的順序調(diào)用其他的一些功能模塊。

目前 HTTP 協(xié)議是被實現(xiàn)在 http 模塊中的,但是有可能將來被剝離到一個單獨的模塊中,以擴展 Nginx 支持 SPDY 協(xié)議。

模塊的分類

Nginx 的模塊根據(jù)其功能基本上可以分為以下幾種類型:

  • event module: 搭建了獨立于操作系統(tǒng)的事件處理機制的框架,及提供了各具體事件的處理。包括 ngx_events_module, ngx_event_core_module和ngx_epoll_module 等。Nginx 具體使用何種事件處理模塊,這依賴于具體的操作系統(tǒng)和編譯選項。

  • phase handler: 此類型的模塊也被直接稱為 handler 模塊。主要負責處理客戶端請求并產(chǎn)生待響應內(nèi)容,比如 ngx_http_static_module 模塊,負責客戶端的靜態(tài)頁面請求處理并將對應的磁盤文件準備為響應內(nèi)容輸出。

  • output filter: 也稱為 filter 模塊,主要是負責對輸出的內(nèi)容進行處理,可以對輸出進行修改。例如,可以實現(xiàn)對輸出的所有 html 頁面增加預定義的 footbar 一類的工作,或者對輸出的圖片的 URL 進行替換之類的工作。

  • upstream: upstream 模塊實現(xiàn)反向代理的功能,將真正的請求轉(zhuǎn)發(fā)到后端服務器上,并從后端服務器上讀取響應,發(fā)回客戶端。upstream 模塊是一種特殊的 handler,只不過響應內(nèi)容不是真正由自己產(chǎn)生的,而是從后端服務器上讀取的。

  • load-balancer: 負載均衡模塊,實現(xiàn)特定的算法,在眾多的后端服務器中,選擇一個服務器出來作為某個請求的轉(zhuǎn)發(fā)服務器。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號