标签:style class blog code http ext
当Nginx检测到配置文件中存在配置块http{}时,会建立一个ngx_http_conf_ctx_t结构体,该结构体定义如下:
typedef struct { void **main_conf; // 每个指针元素指向所有由HTTP模块的create_main_conf方法产生的结构体 void **srv_conf; // 每个指针元素指向所有由HTTP模块的create_srv_conf方法产生的结构体 void **loc_conf; // 每个指针元素指向所有由HTTP模块的create_loc_conf方法产生的结构体 } ngx_http_conf_ctx_t;
ngx_http_conf_ctx_t *ctx; // 定义一个该结构体的指针 ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t)); // 分配该结构体空间 ctx->main_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module); // 分配数组存放指针 ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module); // 分配数组存放指针 ctx->loc_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module); // 分配数组存放指针 for (m = 0; ngx_modules[m]; m++) { if (ngx_modules[m]->type != NGX_HTTP_MODULE) { continue; } module = ngx_modules[m]->ctx; mi = ngx_modules[m]->ctx_index; if (module->create_main_conf) { /* 依次调用所有HTTP模块的create_main_conf方法 * 产生的结构体指针放入上面分配了空间的main_conf指针数组中 */ ctx->main_conf[mi] = module->create_main_conf(cf); if (ctx->main_conf[mi] == NULL) { return NGX_CONF_ERROR; } } if (module->create_srv_conf) { /* 依次调用所有HTTP模块的create_srv_conf方法 * 产生的结构体指针放入上面分配了空间的srv_conf指针数组中 */ ctx->srv_conf[mi] = module->create_srv_conf(cf); if (ctx->srv_conf[mi] == NULL) { return NGX_CONF_ERROR; } } if (module->create_loc_conf) { /* 依次调用所有HTTP模块的create_loc_conf方法 * 产生的结构体指针放入上面分配了空间的loc_conf指针数组中 */ ctx->loc_conf[mi] = module->create_loc_conf(cf); if (ctx->loc_conf[mi] == NULL) { return NGX_CONF_ERROR; } } }
【Nginx】HTTP配置模型,布布扣,bubuko.com
标签:style class blog code http ext
原文地址:http://blog.csdn.net/nestler/article/details/34128109