我們知道,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