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

2022-03-23 15:38 更新

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

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

模塊概述

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

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

目前 HTTP 協(xié)議是被實(shí)現(xiàn)在 http 模塊中的,但是有可能將來(lái)被剝離到一個(gè)單獨(dú)的模塊中,以擴(kuò)展 Nginx 支持 SPDY 協(xié)議。

模塊的分類

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

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

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)