一般一個 location 中的指令會涉及一個 handler 模塊和多個 filter 模塊(固然,多個 location 能夠複用同一個模塊)。handler 模塊負責處理請求,完成響應內容的生成,而 filter 模塊對響應內容進行處理。 用戶根據本身的須要所開發的模塊都屬於第三方模塊。正是有了這麼多模塊的支撐, Nginx 的功能纔會如此強大。
Nginx 的模塊從結構上分爲核心模塊、基礎模塊和第三方模塊:
核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊;
基礎模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊;
第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模 塊。
Nginx 的模塊從功能上分爲以下三類:
Handlers(處理器模塊):此類模塊直接處理請求,並進行輸出內容和修改 headers 信息等操做。Handlers 處理器模塊通常只能有一個; Filters(過濾器模塊):此類模塊主要對其餘處理器模塊輸出的內容進行修改操做,最後由 Nginx 輸出; Proxies(代理類模塊):此類模塊是 Nginx 的 HTTP Upstream 之類的模塊,這些模塊主要與後端一些服務好比 FastCGI 等進行交互,實現服務代理和負載均衡等功能。 html
Nginx 在啓動後,會有一個 master 進程和多個 worker 進程。
master 進程主要用來管理 worker 進程,主要包含:接收來自外界的信號,向各 worker 進程發送信號,監控 worker 進程的運行狀態,當 worker 進程退出後(異常狀況下),會自動 從新啓動新的 worker 進程。 master 進程充當整個進程組與用戶的交互接口,同時對進程進行監護。它不須要處理網絡事件,不負責業務的執行,只會經過管理worker 進程來實現重啓服務、平滑升級、更換日誌文件、配置文件實時生效等功能。 後端
3.Nginx+FastCGI運行原理
Nginx 不支持對外部程序的直接調用或者解析,全部的外部程序(包括 PHP)必須經過FastCGI 接口來調用。FastCGI 接口在 Linux 下是 socket(這個 socket 能夠是文件 socket, 也能夠是 ip socket)。 wrapper 爲了調用 CGI 程序,還須要一個 FastCGI 的 wrapper(wrapper 能夠理解爲用於啓動另外一個程序的程序),這個 wrapper 綁定在某個固定 socket 上,如端口或者文件 socket。當 Nginx 將 CGI 請求發送給這個 socket 的時候,經過 FastCGI 接口,wrapper 接收到請求,而後 Fork(派生)出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接着 wrapper 再將返回的數據經過 FastCGI 接口,沿着固定的 socket傳遞給 Nginx;最後 Nginx 將返回的數據(html 頁面或者圖片)發送給客戶端。網絡