您的位置:首页 > 运维架构 > Nginx

解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程

2012-06-03 12:51 2366 查看

解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程

作者:柳大·Poechant(钟超)
邮箱:zhongchao.ustc#gmail.com(# -> @)
博客:Blog.CSDN.net/Poechant
日期:June 2nd, 2012

1 命名规则

1.1 基本变量

基本变量有三个:ngx_module_t 类型的 ngx_http_foo_bar_module;
ngx_command_t 类型的数组 ngx_http_foo_bar_commands;
ngx_http_module_t 类型的 ngx_http_foo_bar_module_ctx。
假设你开发了一个 Foo Bar 模块,那么模块名称应该叫:
ngx_http_foo_bar_module
命令集合的名字的命名规则:
ngx_http_foo_bar_commands
上下文的明子的命名规则:
ngx_http_foo_bar_module_ctx

1.2 基本类型

模块配置
ngx_http_foo_bar_<main|srv|loc>_conf_t

2 加载与运行流程

这与 ngx_http_foo_bar_module_ctx 很有关系,它是 ngx_http_module_t 类型的,该类型定义如下:
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;

2.1 preconfiguration

调用
ngx_http_foo_bar_module_ctx.preconfiguration
初始化 http 组件和 nginx 其他组件的交互;

2.2 解析配置文件

解析配置文件中的
http
模块。
http
包含
server
location
等模块,所以在解析
http
组件时,会根据具体的配置情况,多次调用
ngx_http_foo_bar_module_ctx.create_(srv|loc)_conf
,创建 main_conf、srv_conf、loc_conf;

2.3 初始化 http 组件的 main 部分

调用
ngx_http_foo_bar_module_ctx.init_main_conf
初始化 main 组件;

2.4 merge

调用
ngx_http_foo_bar_module_ctx.merge_srv_conf
合并那些定义在“http”组件中的“server”组件配置。调用
ngx_http_foo_bar_module_ctx.merge_loc_conf
合并那些定义在上层组件中的“location”配置;

2.5 postconfiguration

调用
ngx_http_foo_bar_module_ctx.postconfigation
初始化 http 组件和 nginx 其他组件的交互。-转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐