这篇文章主要介绍“nginx的http模块初始化源码分析”,在日常操作中,相信很多人在nginx的http模块初始化源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nginx的http模块初始化源码分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
继续http模块的分析,这次分析的是init_module钩子函数的执行。http模块各子模块的init_module钩子主要做的事情是两个,一个就是注册phases回调,一个就是挂载模块到filter链表。首先看一下注册phases回调的模块
access模块
static ngx_int_t ngx_http_access_init(ngx_cycle_t *cycle){ ngx_http_handler_pt *h; ngx_http_core_main_conf_t *cmcf; // 取出http_core_module的配置结构体 cmcf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_core_module); // 设置在NGX_HTTP_ACCESS_PHASE阶段的回调 h = ngx_push_array(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers); if (h == NULL) { return NGX_ERROR; } *h = ngx_http_access_handler; return NGX_OK;}
charset模块
static ngx_int_t ngx_http_charset_filter_init(ngx_cycle_t *cycle){ ngx_http_next_header_filter = ngx_http_top_header_filter; ngx_http_top_header_filter = ngx_http_charset_header_filter; ngx_http_next_body_filter = ngx_http_top_body_filter; ngx_http_top_body_filter = ngx_http_charset_body_filter; return NGX_OK;}
ngx_http_top_header_filter变量是定义在ngx_http.c文件的一个全局变量。ngx_http_next_header_filter变量是每个filter模块自己定义的一个模块内可见的局部变量。ngx_http_top_body_filter类似。每个模块先令自己的next变量执行当前top变量指向的节点,然后再令top节点指向本模块的filter函数。从而实现了一条filter链表。当执行到当前模块的filter钩子后,钩子函数最后会执行next对应的下一个钩子。
到此,关于“nginx的http模块初始化源码分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4217331/blog/4379927