HTTP請求的11個處理階段
typedef enum {
// 接收到完整的HTTP頭部后處理的階段
NGX_HTTP_POST_READ_PHASE = 0,
// URI與location匹配前瓢省,修改URI的階段鸦致,用于重定向
NGX_HTTP_SERVER_REWRITE_PHASE,
// 根據(jù)URI尋找匹配的location塊配置項
NGX_HTTP_FIND_CONFIG_PHASE,
// 上一階段找到location塊后再修改URI
NGX_HTTP_REWRITE_PHASE,
// 防止重寫URL后導(dǎo)致的死循環(huán)
NGX_HTTP_POST_REWRITE_PHASE,
// 下一階段之前的準(zhǔn)備
NGX_HTTP_PREACCESS_PHASE,
// 讓HTTP模塊判斷是否允許這個請求進(jìn)入Nginx服務(wù)器
NGX_HTTP_ACCESS_PHASE
// 向用戶發(fā)送拒絕服務(wù)的錯誤碼,用來響應(yīng)上一階段的拒絕
NGX_HTTP_POST_ACCESS_PHASE,
// 為訪問靜態(tài)文件資源而設(shè)置
NGX_HTTP_TRY_FILES_PHASE,
// 處理HTTP請求內(nèi)容的階段,大部分HTTP模塊介入這個階段
NGX_HTTP_CONTENT_PHASE,
// 處理完請求后的日志記錄階段
NGX_HTTP_LOG_PHASE
} ngx_http_phases;
以上11個階段中,HTTP無法介入的階段有4個:
NGX_HTTP_FIND_CONFIG_PHASE
NGX_HTTP_POST_REWRITE_PHASE
NGX_HTTP_POST_ACCESS_PHASE
NGX_HTTP_TRY_FILES_PHASE
剩余的7個階段,HTTP模塊均能介入殿漠,每個階段可介入模塊的個數(shù)也是沒有限制的,多個HTTP模塊可同時介入同一階段并作用于同一請求佩捞。
參考:《深入理解Nginx模塊開發(fā)與架構(gòu)設(shè)計》