模块及其初始化

1.nginx的模块:
nginx是由各种各样的模块组成,有些模块是默认就会编译进去的,而有些模块则需要通过./configure –with的方式编译进去,所有模块都会被放在一个ngx_moudule[]的全局指针数组里面,数组中的每一个元素都是ngx_module_t的结构体,每个种类的模块有不同的上下文ctx,每个模块有自己支持的命令集ngx_command_t,且在每一个数据结构里面都封装了大量的函数指针,支持相应的回调
2.nginx的模块种类:
主要有五大种类的模块:
NGX_CORE_MODULE
NGX_CONF_MODULE
NGX_EVENT_MODULE
NGX_HTTP_MODULE
NGX_MAIL_MODULE
每个模块的type字段通过该宏进行初始化
3.模块的初始化
就是对ngx_module_t的初始化
包括静态初始化和动态初始化
1》静态初始化:即编译期间完成的初始化
(1) 用宏NGX_MODULE_V1初始化前7个字段
(2) 用全局对象ngx_mname_module_ctx的地址初始化ctx指针
(3) 用全局数组ngx_mname_commands[]初始化commands指针
(4) 用宏NGX_CORE_MODULE等初始化type字段
(5) 初始化init_master等callback
(6) 用宏NGX_MODULE_V1_PADDING初始化最后8个字段
也即在定义该模块时,把它的index和ctx_index初始化为0,初始化模块上下文,模块命令集,模块类型
2》动态初始化:即nginx启动运行期间的初始化
(1)初始化index字段
ngx_max_module = 0;
00326: for (i = 0; ngx_modules[i]; i++) {
00327: ngx_modules[i]->index = ngx_max_module++;
00328: }
每个模块的index就是它对应数组下标的值,全局变量ngx_max_module就是总的模块个数
详细见core模块的初始化
(2)ctx_index的初始化
对于event类型的模块调用ngx_events_block
详细见event模块的初始化
对于http类型的调用ngx_http_block
详细见http类型的初始化
对于mail类型的调用ngx_mail_block

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值