上篇文章主要講述了有關Nginx的主配置文件,爲何須要很是關注Nginx的主配置文件呢?這是由於它是咱們與nginx的核心,這裏的核心不是說nginx的內核部分,而是人機交互的核心,除非基於nginx作二次開發,例如開發第三方模塊,通常咱們只須要使用nginx實現咱們的業務需求。不管是web網站、負載均衡仍是反向代理,都須要對其主配置文件熟悉,這樣才能玩好其優化。nginx
本文就接着來說述有關nginx模塊的相關內容。web
Nginx由內核和各類模塊組成。Nginx自己的工做實際不多,當它響應一個HTTP請求時,是經過配置文件將請求映射到一個location block,根據定位中所配置的各個指令啓動不一樣的模塊完成工做,因此這就是爲何說模塊是Nginx的核心工做者。編程
固然,Nginx的核心部分也不能夠忽略,由於它實現了底層的通信協議,爲其餘模塊和Nginx進程構建了基本的運行時環境,且構建了其餘模塊之間的協做的基礎。後端
通常一個location中的指令會涉及一個handler模塊和多個filter模塊(多個location能夠複用同一個模塊)。handler模塊負責處理請求,完成響應內容的生成,而filter模塊對響應內容進行處理。用戶根據本身的須要所二次開發的模塊都是第三方模塊。這也是nignx功能能夠如此強大而經久不衰的主要緣由。服務器
首先,模塊和功能對應,通常一個模塊對應一個或多個功能(通常不會不少,並且同一個模塊中,功能相似,能夠類比面向對象編程中的重載)。其實這樣的作法也是人性化的體現,一方面支持模塊擴展,一方面便於開發和維護。這也是解耦思想的應用之一。網絡
那究竟什麼是Nginx模塊呢?負載均衡
模塊能夠簡單理解爲一個個封裝好的函數,每一個函數實現一個或幾個相似的功能,Nginx將這些功能模塊組織爲一個鏈,用來應對請求。當一個請求到達的時候,會依次通過這條鏈上的部分或所有功能模塊,進行處理。實現的功能例如:實現對請求解壓縮的模塊,實現 SSI 的模塊,實現與上游服務器進行通信的模塊,實現與 FastCGI 服務進行通信的模塊。ide
比較特殊的兩個模塊分別是http模塊和mail模塊,它們兩個居於核心功能部分和各個功能模塊之間,從而處理與HTTP協議和email協議有關的事件,同時確保這些事件被以正確的順序調用其餘的一些功能模塊。函數
(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模塊
Nginx的處理器模塊——直接處理請求,而且進行輸出內容和修改headers信息等操做,通常狀況下Handlers處理器模塊只能有一個。
Handlers 模塊處理的結果一般有三種狀況: 處理成功,處理失敗(處理的時候發生了錯誤)或者是拒絕處理。在拒絕處理的狀況下,這個 location 的處理就會由默認的 handler 模塊來進行處理。例如,當請求一個靜態文件的時候,若是關聯到這個 location 上的一個 handler 模塊拒絕處理,就會由默認的 ngx_http_static_module 模塊進行處理,該模塊是一個典型的 handler 模塊。
Nginx的過濾器模塊——主要對其餘處理器模塊輸出的內容進行修改操做,最後由Nginx輸出。它的處理時間在獲取回覆內容以後,向用戶發送響應以前。它的處理過程分爲兩個階段,過濾 HTTP 回覆的頭部和主體,在這兩個階段能夠分別對頭部和主體進行修改。
Nginx的代理類模塊——相似於HTTP Upstream 的模塊,這類模塊主要與後端一些服務如Fastcgi等進行交互,實現服務代理和負載均衡(load-balancer)等功能。upstream 這類的模塊將使得Nginx跨越單機完成網絡數據的接收、處理和轉發。這也是在雲時代,Nginx能夠做爲有能力的中間件(作轉發)的關鍵網絡應用組件。
負載均衡模塊用於從upstream指令定義的後端主機列表中選取一臺主機。Nginx 先使用負載均衡模塊找到一臺主機,再使用 upstream 模塊實現與這臺主機的交互。
這三類功能模塊也是基本上做爲第三方開發者最可能開發的三種類型的模塊