透過現象看本質——Nginx模塊

透過現象看本質——Nginx模塊

前言

​ 上篇文章主要講述了有關Nginx的主配置文件,爲什麼需要非常關注Nginx的主配置文件呢?這是因爲它是我們與nginx的核心,這裏的核心不是說nginx的內核部分,而是人機交互的核心,除非基於nginx做二次開發,例如開發第三方模塊,一般我們只需要使用nginx實現我們的業務需求。無論是web網站、負載均衡還是反向代理,都需要對其主配置文件熟悉,這樣才能玩好其優化。

​ 本文就接着來講述有關nginx模塊的相關內容。

Nginx核心工作者——模塊

​ Nginx由內核和各種模塊組成。Nginx本身的工作實際很少,當它響應一個HTTP請求時,是通過配置文件將請求映射到一個location block,根據定位中所配置的各個指令啓動不同的模塊完成工作,所以這就是爲什麼說模塊是Nginx的核心工作者。

當然,Nginx的核心部分也不可以忽略,因爲它實現了底層的通訊協議,爲其他模塊和Nginx進程構建了基本的運行時環境,且構建了其他模塊之間的協作的基礎。

​ 一般一個location中的指令會涉及一個handler模塊和多個filter模塊(多個location可以複用同一個模塊)。handler模塊負責處理請求,完成響應內容的生成,而filter模塊對響應內容進行處理。用戶根據自己的需要所二次開發的模塊都是第三方模塊。這也是nignx功能可以如此強大而經久不衰的主要原因。

1、Nginx模塊概述

​ 首先,模塊和功能對應,一般一個模塊對應一個或多個功能(一般不會很多,而且同一個模塊中,功能類似,可以類比面向對象編程中的重載)。其實這樣的做法也是人性化的體現,一方面支持模塊擴展,一方面便於開發和維護。這也是解耦思想的應用之一。

那究竟什麼是Nginx模塊呢?

​ 模塊可以簡單理解爲一個個封裝好的函數,每個函數實現一個或幾個類似的功能,Nginx將這些功能模塊組織爲一個鏈,用來應對請求。當一個請求到達的時候,會依次經過這條鏈上的部分或全部功能模塊,進行處理。實現的功能例如:實現對請求解壓縮的模塊,實現 SSI 的模塊,實現與上游服務器進行通訊的模塊,實現與 FastCGI 服務進行通訊的模塊。

​ 比較特殊的兩個模塊分別是http模塊和mail模塊,它們兩個居於核心功能部分和各個功能模塊之間,從而處理與HTTP協議和email協議有關的事件,同時確保這些事件被以正確的順序調用其他的一些功能模塊。

2、Nginx模塊分類

(1)、Nginx的模塊基於其結構分爲核心模塊、基礎模塊和第三方模塊

核心模塊

​ 由HTTP模塊、EVENT模塊和MAIL模塊構成。

基礎模塊

​ 由HTTP Access 模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite 模塊構成。

第三方模塊

​ 由HTTP Upstream Request Hash模塊、Notice 模塊和 HTTP Access Key模塊構成。

(2)、Nginx的模塊基於其功能分爲Handlers模塊、Filters模塊和Proxies模塊

Handlers

​ Nginx的處理器模塊——直接處理請求,並且進行輸出內容和修改headers信息等操作,一般情況下Handlers處理器模塊只能有一個。

​ Handlers 模塊處理的結果通常有三種情況: 處理成功,處理失敗(處理的時候發生了錯誤)或者是拒絕處理。在拒絕處理的情況下,這個 location 的處理就會由默認的 handler 模塊來進行處理。例如,當請求一個靜態文件的時候,如果關聯到這個 location 上的一個 handler 模塊拒絕處理,就會由默認的 ngx_http_static_module 模塊進行處理,該模塊是一個典型的 handler 模塊。

Filters

​ Nginx的過濾器模塊——主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx輸出。它的處理時間在獲取回覆內容之後,向用戶發送響應之前。它的處理過程分爲兩個階段,過濾 HTTP 回覆的頭部和主體,在這兩個階段可以分別對頭部和主體進行修改。

Proxies

​ Nginx的代理類模塊——類似於HTTP Upstream 的模塊,這類模塊主要與後端一些服務如Fastcgi等進行交互,實現服務代理和負載均衡(load-balancer)等功能。upstream 這類的模塊將使得Nginx跨越單機完成網絡數據的接收、處理和轉發。這也是在雲時代,Nginx可以作爲有能力的中間件(做轉發)的關鍵網絡應用組件。

​ 負載均衡模塊用於從upstream指令定義的後端主機列表中選取一臺主機。Nginx 先使用負載均衡模塊找到一臺主機,再使用 upstream 模塊實現與這臺主機的交互。

這三類功能模塊也是基本上作爲第三方開發者最可能開發的三種類型的模塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章