Nginx工做原理

  1. Nginx 工做原理
    Nginx 由內核和模塊組成。
    Nginx 自己作的工做實際不多,當它接到一個 HTTP 請求時, 它僅僅是經過查找配置文件將這次請求映射到一個 location block,而此 location 中所配 置的各個指令則會啓動不一樣的模塊去完成工做,所以模塊能夠看作 Nginx 真正的勞動工做者。

一般一個 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

  1. Nginx 的進程模型 在工做方式上,Nginx 分爲單工做進程和多工做進程兩種模式。 
    在單工做進程模式下,除主進程外,還有一個工做進程,工做進程是單線程的; 
    在多工做進程模式下,每一個工做進程包含多個線程。Nginx 默認爲單工做進程模式。

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 頁面或者圖片)發送給客戶端。網絡

Nginx工做原理

相關文章
相關標籤/搜索