发布日期:2013-03-23 10:10 来源:末信 标签: Nginx 模块
 

静态的ngx_http_module_t结构体,包含一大把函数引用。用来创建三个部分的配置和合并配置。一般结构体命名为ngx_http_<module name>_module_ctx。以此,这些函数引用包括:

在读入配置文件前调用

在读入配置文件后调用

在创建全局部分配置时调用(比如,用来分配空间和设置默认值)

在初始化全局部分的配置时调用(比如,把原来的默认值用 nginx.conf读到的值来覆盖)

在创建主机部分的配置时调用

与全局部分配置合并时调用

创建位置部分的配置时掉用

与主机部分配置合并时调用

这些函数参数不同,依赖于它们的功能。这里有这个结构体的定义,摘自

http/ngx_http_config.h ,你可以看到属性各不同的回调函数:

typedef struct {

ngx_int_t (*preconfiguration)(ngx_conf_t *cf);
ngx_int_t (*postconfiguration)(ngx_conf_t *cf);
void *(*create_main_conf)(ngx_conf_t *cf);
char *(*init_main_conf)(ngx_conf_t *cf, void *conf);
void *(*create_srv_conf)(ngx_conf_t *cf); char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);
void *(*create_loc_conf)(ngx_conf_t *cf);
char *(*merge_loc_conf)(ngx_conf_t *cf, void *prev, void *conf);

} ngx_http_module_t;

如果某些函数不用,可以设定为 NULL,Nginx会剔除它。

大多数处理模块只使用最后两个:一个函数用来为特定的位置部分的配置结构体分配内存(称为ngx_http_<module name>_create_loc_conf),另外一个函数用来设定默认值和与继承过来的配置合并(称为ngx_http_<module name >_merge_loc_conf)。这个合并函数负责检验读入的数值是否有效,并设定一些默认值。

这里有一个模块上下文结构体的例子:

static ngx_http_module_t ngx_http_circle_gif_module_ctx = {

NULL, /* preconfiguration */ NULL, /* postconfiguration */

NULL, /* create main configuration */ NULL, /* init main configuration */

NULL, /* create server configuration */ NULL, /* merge server configuration */

ngx_http_circle_gif_create_loc_conf, /* create location configuration */

ngx_http_circle_gif_merge_loc_conf /* merge location configuration */

};

现在开始讲得更深一点。这些配置回调函数看其来很相似,几乎所有模块都一样,而且 Ng inx的API都会用到这个部分,所以值得了解。

相关评论

专题信息
    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。