Nginx (十一) 模块
Module
struct ngx_module_s {
ngx_uint_t ctx_index;
ngx_uint_t index;
ngx_uint_t spare0;
ngx_uint_t spare1;
ngx_uint_t spare2;
ngx_uint_t spare3;
ngx_uint_t version;
void *ctx;
ngx_command_t *commands;
ngx_uint_t type;
ngx_int_t (*init_master)(ngx_log_t *log);
ngx_int_t (*init_module)(ngx_cycle_t *cycle);
ngx_int_t (*init_process)(ngx_cycle_t *cycle);
ngx_int_t (*init_thread)(ngx_cycle_t *cycle);
void (*exit_thread)(ngx_cycle_t *cycle);
void (*exit_process)(ngx_cycle_t *cycle);
void (*exit_master)(ngx_cycle_t *cycle);
uintptr_t spare_hook0;
uintptr_t spare_hook1;
uintptr_t spare_hook2;
uintptr_t spare_hook3;
uintptr_t spare_hook4;
uintptr_t spare_hook5;
uintptr_t spare_hook6;
uintptr_t spare_hook7;
};
这个是ngx_module_t类型。它是nginx模块结构体,其中有许多钩子,init_process()与exit_process()等。
有几个比较重要的成员变量:
ctx_index 模块上下文数组的索引;
index 模块的编号;
version 模块的版本;
ctx 通常指向下面结构体;
typedef struct {
ngx_str_t name;
void *(*create_conf)(ngx_cycle_t *cycle);
char *(*init_conf)(ngx_cycle_t *cycle, void *conf);
} ngx_core_module_t;
这个结构体在其他模块中有不同的变体重新定义,如ngx_event_module_t。
create_conf()钩子是用来创建模块用的上下文内存空间;
init_conf()钩子是用来初始化所创建模块用的上下文内存空间。
commands 指向ngx_command_t结构体;
struct ngx_command_s {
ngx_str_t name;
ngx_uint_t type;
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};
#define ngx_null_command { ngx_null_string, 0, NULL, 0, 0, NULL }
ngx_command_t对象与nginx的配置文件解析有关,在ngx_conf_handler()函数中调用。nginx配置文件中可为不同的模块定制各自不同的配置块,例如event, http, mail。在解析过程中遇上这些配置块的开头,如“http”,就会在模块中搜索与之有相同名称的ngx_command_t对象,并调用其中的set()钩子函数来进一步解析配置块内部的配置参数。
type 表示模块的类型;如event类型,http类型,mail类型等。