Nginx为做到模块化,统一定义了一个结构体ngx_module_s,它相当于c++中的类,里面的回调函数等同于类中的成员函数,其他的字段则为成员变量。这样一个结构体就封装整个模块,包含模块的初始化、销毁过程。具体的祥见http://blog.csdn.net/livelylittlefish/article/details/6571497。
在Nginx每个模块中都定义了ngx_module_s类型的静态全局变量,诸如ngx_core_module、ngx_errlog_module、ngx_conf_module..等等,都是各个模块定义的静态全局变量。这些变量在系统启动的时候会被统一定义到一个全局ngx_module_s数组ngx_modules中保存,并建立相应索引,以方便查询。
ngx_modules变量的定义时机在源码编译的阶段,由配置文件指定(这里没去细查)。这里就要说一说Nginx是如何安装运行的了,Nginx属于源码安装,走配置、编译、安装三部曲,在Nginx源码包中有个名为configure的配置脚本,在linux中运行它,会带动./auto目录下其他脚本的运行,最终生成objs文件夹和编译相关文件Makefile,objs目录下有一个名为ngx_modules.c的文件,在这个文件中它神奇的定义了ngx_modules,并初始化,这个数组有多少个成员就代表编译生成的Nginx将会有多少的模块。系统就是通过这个数组将零散的模块聚合在一起,并成一个系统的。
因为对Nginx认识有限,针对Nginx模块与整体关系的分析目前也只能停留在表层,希望大家多多指正。