Nginx 命令解析 set 函数的说明
NGINX
C, NGINX
字数统计: 355(字)
阅读时长: 1(分)
2018-11-18-Nginx 命令解析 set 函数的说明
对于 ngx_command_t
中 set 的调用,可以参见 ngx_conf_handler
函数节选:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last) { void *conf, **confp; ...... conf = NULL;
if (cmd->type & NGX_DIRECT_CONF) { conf = ((void **) cf->ctx)[cf->cycle->modules[i]->index]; } else if (cmd->type & NGX_MAIN_CONF) { conf = &(((void **) cf->ctx)[cf->cycle->modules[i]->index]); } else if (cf->ctx) { confp = *(void **) ((char *) cf->ctx + cmd->conf); if (confp) { conf = confp[cf->cycle->modules[i]->ctx_index]; } }
rv = cmd->set(cf, cmd, conf);
if (rv == NGX_CONF_OK) { return NGX_OK; } ...... }
|
调用 set
时 conf 指针为模块的上下文。
NGX_DIRECT_CONF
由核心模块使用,表示模块需要解析不属于任何 {}
内的全局配置项,需要与 NGX_MAIN_CONF
配合使用。如果只有 NGX_MAIN_CONF
类型,说明存储配置的结构体还没有创建。
在 ngx_cycle_t
中有成员 conf_ctx
负责维护所有模块的配置结构体。