January 19th Tuesday 2010

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类型等。

你可能感兴趣的:(nginx,struct,Module,command,hook,2010)