NGINX 架構 - 《模組化設計》

閱讀時間約 4 分鐘
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求處理機制』、『管理程式與多工程式設計』、『記憶體池設計』。
而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。

什麼是「模組化設計」

談到Nginx Server的架構,就不能不提「模組化設計」,那什麼是「模組化設計」呢?
模組化設計(英語:Modular design),也稱模塊化設計,是門設計理論與實作方法,其旨在於將一個系統細分為許多小單元,稱為模組(module)或模塊(block),可以獨立的於不同的系統中被建立與使用。模組化設計的特徵為將功能切分為抽象的、可擴充的、可重複使用的模組;更多細節,在維基百科上就有介紹了 - 《模組化設計wiki
因為這不是這篇主要介紹的重點,故不深入介紹,只需要理解概念就行,所以我們應該要透過簡單的文字,來讓自己迅速理解才是,就好比我們學加法時的候都知道「1+1=2」,但不用真的去理解為什麼等於2吧!
簡而言之,所謂的「模組化設計」就是支援應用擴充與升級。就如同用積木搭房子一樣,各個模組之間既能保持自己原有的獨立性,也能透過介面保持聯繫。
模組是由數個「基礎功能元件」組成的「特定功能組件」
Nginx Server 的開發完全遵循模組化設計思想,因此在應用擴充及升級方面,表現出極大的優越性。

Nginx 模組化結構

高度模組化的設計是Nginx 的架構基礎。Nginx Server 被分解為多個模組 ,每個模組就是一個功能模組,只負責自身的功能,模組之間嚴格遵循“高內聚,低耦合”的原則。
Nginx的模組又區分為五大類,分別為核心模組、標準HTTP模組、可選HTTP模組、郵件服務模組、第三方協力廠商模組。
NGINX 模組架構
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模組:

可選HTTP模組與標準HTTP模組較為不同,這邊在快速編譯時,是預設不編譯的。如果想要使用相關模組,就必須再設定時使用
--with-XXX參數宣告
例如:Flash 多媒體傳輸 、解析 GeoIP 請求、 網路傳輸壓縮 、 安全協議 SSL 支援 ...等
下面分享一些官方提供的常用可選HTTP模組:
常見可選HTTP模組
來源:連結

郵件服務模組:

Mail Service是Nginx Server提供的主要服務之一,但和可選HTTP模組一樣,快速編譯時,預設不編譯郵件服務模組。
Mail Service Module
來源:連結
這些模組完成了郵件服務的主要功能,包含對POP3協定、IMAP協定和SMTP協定的支援,對身分認證、郵件代理和SSL安全服務的提供

協力廠商模組:

主要是為了擴充套件 Nginx 伺服器應用,由眾多的協力廠商的開發者來自定義功能,比如: Json 支援、 Lua 支援等。

參考資料:

此篇文章會顯示動態置底廣告
為什麼會看到廣告
13會員
28內容數
技術筆記紀錄、生活隨筆
留言0
查看全部
發表第一個留言支持創作者!
Scott Salon 的其他內容
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
    一張椅子,至少要有三個腳,坐起來才會穩固。人生也如同一張椅子,如果想讓自己過得美好,一定不能缺少三個重要支柱,分別是好信用、好朋友和好伴侶。當我們來到世上,家庭成員,没得選擇;出生背景,没得選擇;學校際遇,没得選擇;其他還有好多好多的人際關係和接觸事物,無法由自己選擇。因為無法選擇,
Thumbnail
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
在雲端建立AKS後,運行後有許多Container會被外部服務呼叫使用。但我們知道當我們佈署到AKS,如果要被外面服務呼叫,就要在YAML將Type設定成Loadbalance,一旦這樣設定,就會變成每個Container就會多出一個對外的IP,Container變多了,對外IP就會擴增很快,也不好
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
Thumbnail
打包網頁 在部署網站之前,我們要先來打包我們的網頁前端專案 為什麼要打包呢?什麼是打包呢?這有點像是編譯,如果你寫過 C 應該講到這裡就理解為什麼要這樣做了 在網頁開發中網頁內容最原始就是直接用 html 下去寫,但一個成熟的開發者會善用框架來開發,不論是用 vue 或 react,樣式的部分也會從
Thumbnail
歷經千辛萬苦,終於要來架站啦!首先先來介紹我們的架站工具 Nginx,最常用的架站工具主要有兩個,Apache 和 Nginx Apache 的歷史悠久,使用的人數也最多,之前在選擇架站工具時,考量的點是 Apache 比較肥,設定也比較難寫,所以最後選擇 Nginx 作為我的架站工具 Nginx
Thumbnail
要完整的了解整個網頁的開發需要掌握相當多的知識,就算目標只是學習網頁開發中的其中一個部分,比方說只是想成為前端工程師,或是只是想成為後端工程師,最好還是對整個網頁專案整體有一定程度的了解,才不會和其他工程師合作的時候,各開發各的,然後兜不起來 這個系列的教學,希望就算你的目標不是成為全端工程師,也能
Thumbnail
Recently, I add some useful settings for my nginx web server. I would like to take a note of some basic and useful settings of nginx. http server
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
    一張椅子,至少要有三個腳,坐起來才會穩固。人生也如同一張椅子,如果想讓自己過得美好,一定不能缺少三個重要支柱,分別是好信用、好朋友和好伴侶。當我們來到世上,家庭成員,没得選擇;出生背景,没得選擇;學校際遇,没得選擇;其他還有好多好多的人際關係和接觸事物,無法由自己選擇。因為無法選擇,
Thumbnail
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
在雲端建立AKS後,運行後有許多Container會被外部服務呼叫使用。但我們知道當我們佈署到AKS,如果要被外面服務呼叫,就要在YAML將Type設定成Loadbalance,一旦這樣設定,就會變成每個Container就會多出一個對外的IP,Container變多了,對外IP就會擴增很快,也不好
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
Thumbnail
打包網頁 在部署網站之前,我們要先來打包我們的網頁前端專案 為什麼要打包呢?什麼是打包呢?這有點像是編譯,如果你寫過 C 應該講到這裡就理解為什麼要這樣做了 在網頁開發中網頁內容最原始就是直接用 html 下去寫,但一個成熟的開發者會善用框架來開發,不論是用 vue 或 react,樣式的部分也會從
Thumbnail
歷經千辛萬苦,終於要來架站啦!首先先來介紹我們的架站工具 Nginx,最常用的架站工具主要有兩個,Apache 和 Nginx Apache 的歷史悠久,使用的人數也最多,之前在選擇架站工具時,考量的點是 Apache 比較肥,設定也比較難寫,所以最後選擇 Nginx 作為我的架站工具 Nginx
Thumbnail
要完整的了解整個網頁的開發需要掌握相當多的知識,就算目標只是學習網頁開發中的其中一個部分,比方說只是想成為前端工程師,或是只是想成為後端工程師,最好還是對整個網頁專案整體有一定程度的了解,才不會和其他工程師合作的時候,各開發各的,然後兜不起來 這個系列的教學,希望就算你的目標不是成為全端工程師,也能
Thumbnail
Recently, I add some useful settings for my nginx web server. I would like to take a note of some basic and useful settings of nginx. http server