nginx 支持模块化,系统中的很多功能就是一个模块,比如event、http、email 等,可以看出,模块在nginx中重要性,模块的定义在 src/core/ngx_conf_file.h中,
index 表示模块的索引号,就好比我们再公司中的的工号。最小的是从0开始的
ctx_index 表示分类索引号,它表示了模块在该类模块中的索引号。比如我们在公司有了工号,在一个部门内部,为了内部管理的方便,给了你一个部门的编号。
spare0,.....spare3 ,version 它们应该是版本相关的信息,待进一步考证。
ctx 模块的上下文,不同的模块具有不同的上下文,所以这里使用了void* 表示,比如我们前面说的四种模块,就有四种模块上下文,分别是
ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、 ngx_mail_module_t。模块上下文主要存放一些函数,这样可以实现对应模块的一些功能,比如core模块中创建模块的配置以及初始化配置都可以在上下文中做。
command 模块的命令集。模块的很多行为需要用户指定和控制,这些命令集就是提供给用户的接口,用户通过配置文件,可以调用这些命令集,实现对模块的控制。
type 模块的类型,就是上面介绍的core、mail、 event 和http
init_master、 init_module、init_process、init_thread、exit_thread、exit_process、 exit_master是函数指针,它们初始化master、模块初始化、进程初始化、线程初始化、线程退出、进程退出、master退出等。模块并不是需要所有这些函数的,只是需要才进行定义就可以。
spare_hook0 -- spare_hook7 填充?待考证。
下面详细介绍下模块的上下文
1 ngx_core_module_t;
只有名字,模块配置的创建和初始化函数
2 ngx_event_module_t
和core相比,就多了一个actions,这个在后面再介绍。
3 ngx_http_module_t
因为http的配置比较复杂,包括主配置、service配置和location配置,所以这里的函数也比较的多
4 ngx_mail_module_t
从上面的介绍可以看出,模块的上下文主要做一些模块信息的创建、初始化的工作,各个模块可以根据需求进行定制。
最后我们看看这四个模块
core模块比较简单,所有的函数都是空的。
event也模块比较简单,所有的函数都是空的。
http 也模块比较简单,所有的函数都是空的。