在ngx_module.h中引用了两个至关重要的外部变量
1 2 | extern ngx_module_t *ngx_modules[]; extern char *ngx_module_names[]; |
ngx_modules跟ngx_module_names定义在ngx_modules.c中,这个文件并不存在于nginx源码中,在编译时执行configure动态生成。ngx_modules数组包含所有的Nginx模块,Nginx启动时会调用ngx_cycle_modules函数,原型如下:
1 | ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) |
此函数的目的是将ngx_modules中的数据复制到cycle中,函数调用顺序如下:
main->ngx_init_cycle->ngx_cycle_modules