上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求處理機制』、『管理程式與多工程式設計』、『記憶體池設計』。
而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。
什麼是「模組化設計」
談到Nginx Server的架構,就不能不提「模組化設計」,那什麼是「模組化設計」呢?
模組化設計(英語:Modular design),也稱模塊化設計,是門設計理論與實作方法,其旨在於將一個系統細分為許多小單元,稱為模組(module)或模塊(block),可以獨立的於不同的系統中被建立與使用。模組化設計的特徵為將功能切分為抽象的、可擴充的、可重複使用的模組;更多細節,在維基百科上就有介紹了 - 《模組化設計wiki》
因為這不是這篇主要介紹的重點,故不深入介紹,只需要理解概念就行,所以我們應該要透過簡單的文字,來讓自己迅速理解才是,就好比我們學加法時的候都知道「1+1=2」,但不用真的去理解為什麼等於2吧!
簡而言之,所謂的「模組化設計」就是支援應用擴充與升級。就如同用積木搭房子一樣,各個模組之間既能保持自己原有的獨立性,也能透過介面保持聯繫。
模組是由數個「基礎功能元件」組成的「特定功能組件」
Nginx Server 的開發完全遵循模組化設計思想,因此在應用擴充及升級方面,表現出極大的優越性。
Nginx 模組化結構
高度模組化的設計是Nginx 的架構基礎。Nginx Server 被分解為多個模組 ,每個模組就是一個功能模組,只負責自身的功能,模組之間嚴格遵循“高內聚,低耦合”的原則。
Nginx的模組又區分為五大類,分別為核心模組、標準HTTP模組、可選HTTP模組、郵件服務模組、第三方協力廠商模組。
Nginx的原始碼主要分佈在src/目錄下,src/目錄下也包含了所有的模組:
NGINX Default Repository
來源:連結
核心模組:
核心模組主要包含了對兩種功能的支援:
a. 主體功能:包含處理程序管理、許可權控制、錯誤記錄檔紀錄、設定解析等。
b. 回應請求事件功能:包含事件驅動機制、正規表示法解析等。
ngx_core:基礎核心庫和框架 -
NGINX的核心原始碼,包含常用的資料結構以及Nginx核心實現的程式碼。
ngx_event:事件驅動模型 -
NGINX事件驅動模型,以及定時器的實現相關代碼。
標準HTTP模組:
Nginx Server主要提供HTTP Service協議解析相關的功能,包含進階HTTP服務、Mail Service..等等,該模組皆在預設的情況下,直接被編譯到Nginx中。
ngx_http:HTTP 主要模組 -
Nginx主要都是Http Server的相關代碼,Port Config、Web編碼設定、HTTP響應頭設定 ...等等。
下面分享一些官方提供的常用標準HTTP模組:
可選HTTP模組:
可選HTTP模組與標準HTTP模組較為不同,這邊在快速編譯時,是預設不編譯的。如果想要使用相關模組,就必須再設定時使用
--with-XXX參數宣告
例如:Flash 多媒體傳輸 、解析 GeoIP 請求、 網路傳輸壓縮 、 安全協議 SSL 支援 ...等
下面分享一些官方提供的常用可選HTTP模組:
郵件服務模組:
Mail Service是Nginx Server提供的主要服務之一,但和可選HTTP模組一樣,快速編譯時,預設不編譯郵件服務模組。
這些模組完成了郵件服務的主要功能,包含對POP3協定、IMAP協定和SMTP協定的支援,對身分認證、郵件代理和SSL安全服務的提供
協力廠商模組:
主要是為了擴充套件 Nginx 伺服器應用,由眾多的協力廠商的開發者來自定義功能,比如: Json 支援、 Lua 支援等。
參考資料: