HTTP请求的11个处理阶段
typedef enum {
// 接收到完整的HTTP头部后处理的阶段
NGX_HTTP_POST_READ_PHASE = 0,
// URI与location匹配前,修改URI的阶段,用于重定向
NGX_HTTP_SERVER_REWRITE_PHASE,
// 根据URI寻找匹配的location块配置项
NGX_HTTP_FIND_CONFIG_PHASE,
// 上一阶段找到location块后再修改URI
NGX_HTTP_REWRITE_PHASE,
// 防止重写URL后导致的死循环
NGX_HTTP_POST_REWRITE_PHASE,
// 下一阶段之前的准备
NGX_HTTP_PREACCESS_PHASE,
// 让HTTP模块判断是否允许这个请求进入Nginx服务器
NGX_HTTP_ACCESS_PHASE
// 向用户发送拒绝服务的错误码,用来响应上一阶段的拒绝
NGX_HTTP_POST_ACCESS_PHASE,
// 为访问静态文件资源而设置
NGX_HTTP_TRY_FILES_PHASE,
// 处理HTTP请求内容的阶段,大部分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模块均能介入,每个阶段可介入模块的个数也是没有限制的,多个HTTP模块可同时介入同一阶段并作用于同一请求。
参考:《深入理解Nginx模块开发与架构设计》