nginx 11個過程

nginx在處理每個用戶請求時,都是按照若干個不一樣的階段依次處理的,與配置文件上的順序沒有關係,詳細內容能夠閱讀《深刻理解nginx:模塊開發與架構解析》這本書,這裏只作簡單介紹;nginx

一、post-read架構

  讀取請求內容階段,nginx 讀取並解析完請求頭以後就當即開始運行;併發

  例如模塊 ngx_realip 就在 post-read 階段註冊了處理程序,它的功能是迫使 Nginx 認爲當前請求的來源地址是指定的某一個請求頭的值。post

二、server-rewritelua

  server 塊中請求地址重寫階段;日誌

  當 ngx_rewrite 模塊的 rewrite、set 配置指令直接書寫在 server 配置塊中時,基本上都是運行在 server-rewrite 階段code

      

三、find-configserver

  配置查找階段,用來完成當前請求與 location 配重塊之間的配對工做;對象

  這個階段並不支持 Nginx 模塊註冊處理程序,而是由 Nginx 核心來完成當前請求與 location 配置塊之間的配對工做。ip

四、rewrite

  location 塊中請求地址重寫階段,當 ngx_rewrite 模塊的 rewrite 指令用於 location 中,就是再這個階段運行的;

  另外,ngx_set_misc(設置md五、encode_base64等) 模塊的指令,還有 ngx_lua 模塊的 set_by_lua 指令和 rewrite_by_lua 指令也在此階段。

五、post-rewrite

  請求地址重寫提交階段,由 Nginx 核心完成 rewrite 階段所要求的「內部跳轉」操做,若是 rewrite 階段有此要求的話。

六、preaccess

  訪問權限檢查準備階段,標準模塊 ngx_limit_req 和 ngx_limit_zone 就運行在此階段,前者能夠控制請求的訪問頻度,然後者能夠限制訪問的併發度。

七、access

  訪問權限檢查階段,標準模塊 ngx_access、第三方模塊 ngx_auth_request 以及第三方模塊 ngx_lua 的 access_by_lua 指令就運行在這個階段。 配置指令可能是執行訪問控制性質的任務,好比檢查用戶的訪問權限,檢查用戶的來源 IP 地址是否合法。

八、post-access

  訪問權限檢查提交階段;

  主要用於配合 access 階段實現標準 ngx_http_core 模塊提供的配置指令 satisfy 的功能。

  satisfy all(與關係)

  satisfy any(或關係)

九、try-files

  配置項 try_files 處理階段;

  專門用於實現標準配置指令 try_files 的功能 若是前 N-1 個參數所對應的文件系統對象都不存在,try-files 階段就會當即發起「內部跳轉」到最後一個參數(即第 N 個參數)所指定的 URI。

十、content

  內容產生階段,是全部請求處理階段中最爲重要的階段,由於這個階段的指令一般是用來生成HTTP響應內容的;

  Nginx 的 content 階段是全部請求處理階段中最爲重要的一個,由於運行在這個階段的配置指令通常都肩負着生成「內容」 並輸出 HTTP 響應的使命。

十一、log

  日誌模塊處理階段;

  記錄日誌。

相關文章
相關標籤/搜索