NGINX 处理阶段说明
在 NGINX 中 HTTP 请求分为 11 个处理阶段,其中只有 7 个阶段用户可以介入。除了 NGX_HTTP_CONTENT_PHASE
阶段外,其余阶段只能通过向全局的 ngx_http_core_main_conf_t
结构体的 phases
数组添加 ngx_http_handler_pt
处理方法实现。在 NGX_HTTP_CONTENT_PHASE
阶段,除了上述方法外还可以通过将 ngx_http_handler_pt
设置到 ngx_http_core_loc_conf_t
结构体的 handler
指针中。
使用 ngx_http_core_loc_conf_t
介入 NGX_HTTP_CONTENT_PHASE 处理
如果使用将 ngx_http_handler_pt
设置到 ngx_http_core_loc_conf_t->handler
的方法来处理 HTTP 请求,那么在 NGX_HTTP_CONTENT_PHASE
阶段只有 handler
指针指向的处理函数被调用。并且无论处理函数返回任何值,都会直接调用 ngx_http_finalize_request
方法结束请求。
示例代码:
1 | static char * |
向 ngx_http_core_main_conf_t->phases
添加处理方法
这种方法通过向 NGX_HTTP_CONTENT_PHASE
阶段的动态数组添加处理函数来实现,此时在 NGX_HTTP_CONTENT_PHASE
会调用本阶段的多个处理函数。如果处理函数返回 NGX_DECLINED
会调用下一个处理函数,返回其他值则会调用 ngx_http_finalize_request
方法结束请求。
示例代码:
1 | static ngx_int_t |
介入其他处理阶段
示例代码:
1 | static ngx_int_t |