天天看點

《高性能Linux伺服器建構實戰》——1.3節Nginx的子產品與工作原理

1.3 nginx的子產品與工作原理

nginx由核心和子產品組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置檔案将用戶端請求映射到一個location block(location是nginx配置中的一個指令,用于url比對),而在這個location中所配置的每個指令将會啟動不同的子產品去完成相應的工作。

nginx的子產品從結構上分為核心子產品、基礎子產品和第三方子產品, http子產品、event子產品和mail子產品等屬于核心子產品,http access子產品、http fastcgi子產品、http proxy子產品和http rewrite子產品屬于基礎子產品,而http upstream request hash子產品、notice子產品和http access key子產品屬于第三方子產品,使用者根據自己的需要開發的子產品都屬于第三方子產品。正是有了這麼多子產品的支撐,nginx的功能才會如此強大。

nginx的子產品從功能上分為如下三類。

handlers(處理器子產品)。此類子產品直接處理請求,并進行輸出内容和修改headers資訊等操作。handlers處理器子產品一般隻能有一個。

filters (過濾器子產品)。此類子產品主要對其他處理器子產品輸出的内容進行修改操作,最後由nginx輸出。

proxies (代理類子產品)。此類子產品是nginx的http upstream之類的子產品,這些子產品主要與後端一些服務比如fastcgi等進行互動,實作服務代理和負載均衡等功能。

圖1-1展示了nginx子產品正常的http請求和響應的過程。

《高性能Linux伺服器建構實戰》——1.3節Nginx的子產品與工作原理

在工作方式上,nginx分為單工作程序和多工作程序兩種模式。在單工作程序模式下,除主程序外,還有一個工作程序,工作程序是單線程的;在多工作程序模式下,每個工作程序包含多個線程。nginx預設為單工作程序模式。

nginx的子產品直接被編譯進nginx,是以屬于靜态編譯方式。啟動nginx後,nginx的子產品被自動加載,不像apache,首先将子產品編譯為一個so檔案,然後在配置檔案中指定是否進行加載。在解析配置檔案時,nginx的每個子產品都有可能去處理某個請求,但是同一個處理請求隻能由一個子產品來完成。

繼續閱讀