这里注意 ngx_http_reqeust_t的header_in保留了读到的包体 这里ngx_http_request_t中的main_conf、src_conf、loc_conf来自connection中data的hc r->main_conf = hc->conf_ctx->main_conf; r->srv_conf = hc->conf_ctx->srv_conf; r->loc_conf = hc->conf_ctx->loc_conf; 第三步,ngx_http_proce...
r->srv_conf = cscf->ctx->srv_conf; r->loc_conf = cscf->ctx->loc_conf; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 重点是ngx_http_find_virtual_server,检索当前配置的server表,找到对应的server。最后2行,把匹配的svr_conf,以及server里面的location表...
前面提到每个模块负责解析和存储自己关心的配置指令,即每个模块都应该有个可以存储配置的结构体,该结构体通过模块上下文结构体的函数create_conf,create_main_conf,create_srv_conf或者create_loc_conf创建。 比如说如下表: 问题来了,每个模块创建自己的配置结构体,存储是完全分散的,如何能快速查找到这些配置结构体呢?
char *(*init_main_conf)(ngx_conf_t *cf, void *conf);//初始化main级别上下文 void *(*create_srv_conf)(ngx_conf_t *cf);//创建server级别配置上下文 char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);//合并server级别配置上下文 void *(*create_loc_conf)(ngx_conf_t ...
1. 函数ngx_http_proxy_cache用来解析proxy_cache指令。此函数的主要作用是初始化ngx_http_proxy_loc_conf_t结构中upstream成员的cache_zone成员。 2. 获取指令proxy_cache中的name参数。然后调用函数ngx_shared_memory_add来初始化ngx_http_proxy_loc_conf_t结构中upstream成员的cache_zone成员。参数name对应的缓存...
conf->output_words.data =NULL;returnconf; } 我们可以看到,就是先分配一段 ngx_http_hello_world_loc_conf_t 所使用的大小的内存。并初始化 ngx_http_hello_world_loc_conf_t 唯一的成员 output_words。 2 merge location 用于ngx_http_hello_world_module_ctx 中的 location 合并函数: ...
ngx_http_core_loc_conf_t *pclcf) { ... locations = pclcf->locations; ... /* 按照类型排序location,排序完后的队列: (exact_match 或 inclusive) (排序好的,如果某个exact_match名字和inclusive location相同,exact_match排在前面) | regex(未排序)| named(排序好的) | noname(未排序)*/ ...
ngx_http_request_t *r, ngx_int_t rc)3412 {...3456 log->action = "logging request";34573458 ngx_http_log_request(r);34593460 log->action = "closing request";34613462 if (r->connection->timedout) {3463 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module)...
本文讲解http各个模块create_srv_conf和create_loc_conf钩子,还有指令的解析。 各模块的create_srv_conf和create_loc_conf函数逻辑都类似,不一一列举,执行完后内存视图是。 这里没有描述 下面是指令的解析。 1 access模块 1 allow、deny指令 代码语言:javascript ...
其实现方式如下: 1 在该location下的ngx_http_core_loc_conf_t结构体中赋值clcf→handler. 2 在请求r的字段中r→content_handler 中,将其赋值为的clcf→handler. 3 包裹函数的处理逻辑: PS: 1 若clcf的handler被调用,则这一阶段的其它钩子将被忽略。 2 若content钩子返回非DECLINED,则意味着该请求被处理完...