HTTP請求的11個處理階段
阿新 • • 發佈:2019-03-04
nginx服務 找到 做到 read strong 完整 dde 循環 location 摘自 陶輝 深入理解Nginx
幾乎所以有關Nginx書只要是講深入點的就會講到Nginx請求的11個處理階段,要記住這些真是不易,人腦特別不擅長記住各種東西,只能做些索引罷了,能做到知道這個知識點在哪兒能找到不就行了,可是你去面試還是問這些理論,所以這裏匯總下記錄如下
ngx_http_phases階段定義
typedef enum { // 在接收到完整的HTTP頭部後處理的HTTP階段 NGX_HTTP_POST_READ_PHASE = 0, /*在將請求的URI與location表達式匹配前,修改請求的URI(所謂的重定向)是一個獨立的HTTP階段*/ NGX_HTTP_SERVER_REWRITE_PHASE, /*根據請求的URI尋找匹配的location表達式,這個階段只能由ngx_http_core_module模塊實現,不建議其他HTTP模塊重新定義這一階段的行為*/ NGX_HTTP_FIND_CONFIG_PHASE, /*在NGX_HTTP_FIND_CONFIG_PHASE階段尋找到匹配的location之後再修改請求的URI*/ NGX_HTTP_REWRITE_PHASE, /*這一階段是用於在rewrite重寫URL後,防止錯誤的nginx.conf配置導致死循環(遞歸地修改URI),因此,這一階段僅由ngx_http_core_module模塊處理。目前,控制死循環的方式很簡單,首先檢查rewrite的次數,如果一個請求超過10次重定向,就認為進入了rewrite死循環,這時在NGX_HTTP_POST_REWRITE_PHASE階段就會向用戶返回500,表示服務器內部錯誤*/ NGX_HTTP_POST_REWRITE_PHASE, /*表示在處理NGX_HTTP_ACCESS_PHASE階段決定請求的訪問權限前,HTTP模塊可以介入的處理階段*/ NGX_HTTP_PREACCESS_PHASE, // 這個階段用於讓HTTP模塊判斷是否允許這個請求訪問Nginx服務器 NGX_HTTP_ACCESS_PHASE, /*在NGX_HTTP_ACCESS_PHASE階段中,當HTTP模塊的handler處理函數返回不允許訪問的錯誤碼時(實際就是NGX_HTTP_FORBIDDEN或者NGX_HTTP_UNAUTHORIZED),這裏將負責向用戶發送拒絕服務的錯誤響應。因此,這個階段實際上用於給NGX_HTTP_ACCESS_PHASE階段收尾*/ NGX_HTTP_POST_ACCESS_PHASE, /*這個階段完全是為try_files配置項而設立的,當HTTP請求訪問靜態文件資源時,try_files配置項可以使這個請求順序地訪問多個靜態文件資源,如果某一次訪問失敗,則繼續訪問try_files中指定的下一個靜態資源。這個功能完全是在NGX_HTTP_TRY_FILES_PHASE階段中實現的*/ NGX_HTTP_TRY_FILES_PHASE, // 用於處理HTTP請求內容的階段,這是大部分HTTP模塊最願意介入的階段 NGX_HTTP_CONTENT_PHASE, /*處理完請求後記錄日誌的階段。例如,ngx_http_log_module模塊就在這個階段中加入了一個handler處理方法,使得每個HTTP請求處理完畢後會記錄access_log訪問日誌*/ NGX_HTTP_LOG_PHASE } ngx_http_phases;
-
NGX_HTTP_POST_READ_PHASE階段
-
NGX_HTTP_SERVER_REWRITE_PHASE階段
-
NGX_HTTP_FIND_CONFIG_PHASE階段
-
NGX_HTTP_REWRITE_PHASE階段
-
NGX_HTTP_POST_REWRITE_PHASE階段
-
NGX_HTTP_PREACESS_PHASE階段
-
NGX_HTTP_ACCESS_PHASE階段
-
NGX_HTTP_POST_ACCESS_PHASE階段
-
NGX_HTTP_TRY_FILES_PHASE階段
- NGX_HTTP_LOG_PHASE階段
HTTP請求的11個處理階段