标签:完整 struct tracking 耦合度 通过 不同 hand phoenix 它的
typedef enum {
NGX_HTTP_POST_READ_PHASE = 0, // 接收到完整的HTTP头部后处理的阶段
NGX_HTTP_SERVER_REWRITE_PHASE, // URI与location匹配前,改动URI的阶段,用于重定向
NGX_HTTP_FIND_CONFIG_PHASE, // 依据URI寻找匹配的location块配置项
NGX_HTTP_REWRITE_PHASE, // 上一阶段找到location块后再改动URI
NGX_HTTP_POST_REWRITE_PHASE, // 防止重写URL后导致的死循环
NGX_HTTP_PREACCESS_PHASE, // 下一阶段之前的准备
NGX_HTTP_ACCESS_PHASE, // 让HTTP模块推断是否同意这个请求进入Nginx服务器
NGX_HTTP_POST_ACCESS_PHASE, // 向用户发送拒绝服务的错误码,用来响应上一阶段的拒绝
NGX_HTTP_TRY_FILES_PHASE, // 为訪问静态文件资源而设置
NGX_HTTP_CONTENT_PHASE, // 处理HTTP请求内容的阶段,大部分HTTP模块介入这个阶段
NGX_HTTP_LOG_PHASE // 处理完请求后的日志记录阶段
} ngx_http_phases;
typedef struct ngx_http_phase_handler_s ngx_http_phase_handler_t;
typedef ngx_int_t (*ngx_http_phase_handler_pt)(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph);
typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
struct ngx_http_phase_handler_s {
ngx_http_phase_handler_pt checker; // 由HTTP框架定义和调用,此函数又调用下方的handler方法
ngx_http_handler_pt handler; // HTTP模块通过实现这种方法介入某个阶段
ngx_uint_t next; // 下一个阶段的序号
};
typedef struct {
ngx_http_phase_handler_t *handlers; // 一个请求可能经历的全部ngx_http_handler_pt处理方法
ngx_uint_t server_rewrite_index;
ngx_uint_t location_rewrite_index;
} ngx_http_phase_engine_t;
typedef struct {
....
ngx_http_phase_engine_t phase_engine; /* 保存处理HTTP请求的各个阶段 */
....
} ngx_http_core_main_conf_t;
static char* ngx_http_mytest(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf;
// 找到mytest配置项所属的配置块
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
// 设置处理请求的方法,HTTP框架在处理用户请求进行到NGX_HTTP_CONTENT_PHASE阶段时
// 假设主机域名、URI和mytest模块所在配置块名称同样。就会调用函数ngx_http_mytest_handler
clcf->handler = ngx_http_mytest_handler;
return NGX_CONF_OK;
}
标签:完整 struct tracking 耦合度 通过 不同 hand phoenix 它的
原文地址:https://www.cnblogs.com/ldxsuanfa/p/10020027.html