HTTP請求的11個處理階段

摘自 陶輝 深刻理解Nginxnginx

幾乎因此有關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階段ide

  • NGX_HTTP_SERVER_REWRITE_PHASE階段函數

  • NGX_HTTP_FIND_CONFIG_PHASE階段日誌

  • NGX_HTTP_REWRITE_PHASE階段code

  • 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階段
相關文章
相關標籤/搜索