天天看點

nginx phases 詳細介紹

     我們知道,nginx 請求分為下面幾個階段:

typedef enum {

    NGX_HTTP_POST_READ_PHASE = 0,      //讀取請求

    NGX_HTTP_SERVER_REWRITE_PHASE,     //server重寫

    NGX_HTTP_FIND_CONFIG_PHASE,        //查找配置

    NGX_HTTP_REWRITE_PHASE,            //重寫

    NGX_HTTP_POST_REWRITE_PHASE,       //處理重寫

    NGX_HTTP_PREACCESS_PHASE,          //權限檢查準備階段

    NGX_HTTP_ACCESS_PHASE,             //權限檢查

    NGX_HTTP_POST_ACCESS_PHASE,        //權限檢查後處理

    NGX_HTTP_TRY_FILES_PHASE,          //不知道

    NGX_HTTP_CONTENT_PHASE,            //結果生成階段

    NGX_HTTP_LOG_PHASE                 //日志處理階段

} ngx_http_phases;

下面對這些過程詳細介紹:

一  NGX_HTTP_POST_READ_PHASE

do nothing

二  NGX_HTTP_SERVER_REWRITE_PHASE

do nothing

三 NGX_HTTP_FIND_CONFIG_PHASE

      根據請求的位置,去查找對應的 loc_conf ,具體過程可以 子產品定位 中介紹。

四 NGX_HTTP_REWRITE_PHASE

五 NGX_HTTP_POST_REWRITE_PHASE,     

六 NGX_HTTP_PREACCESS_PHASE,

七 NGX_HTTP_ACCESS_PHASE,       

./src/http/modules/ngx_http_auth_basic_module.c:    h = ngx_array_push(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers);

./src/http/modules/ngx_http_access_module.c:    h = ngx_array_push(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers);

這個階段有兩個handler 

八 NGX_HTTP_POST_ACCESS_PHASE,

直接調用 ngx_http_core_post_access_phase函數 (ngx_http_core_module.c)。現在基本沒有幹什麼事情

九 NGX_HTTP_TRY_FILES_PHASE,

十 NGX_HTTP_CONTENT_PHASE,      

直接調用 ngx_http_core_content_phase()來生成内容

預設的情況下,這個包含三個handler:

ngx_http_index_module.c         : 如果是目錄,那麼在index後面的檔案中選擇一個進行跳轉

ngx_http_autoindex_module.c

ngx_http_static_module.c            處理靜态的檔案

 十一 NGX_HTTP_LOG_PHASE

繼續閱讀