您的位置:首页 > 理论基础 > 计算机网络

nginx-----http配置的解析

2015-07-14 09:28 274 查看
对nginx配置解析这块,一直都是模模糊糊,没有条理,现在梳理一下:


1.nginx_core_module这个概念,在别人的文章中,经常出现经常混淆,它有两个意思:

1)一个意思就是nginx_core_module本身,它和nginx_http_module、nginx_event_module还有ngx_mail_module是并列的,他们是最上层的一些模块,你看他们的定义会发现,他们都是NGX_CORE_MODULE的,代码如下所示,这和nginx源码目录结构式一致的;另一个就是NGX_CORE_MODULE类型

ngx_module_t  ngx_core_module = {
NGX_MODULE_V1,
&ngx_core_module_ctx,                  /* module context */
ngx_core_commands,                     /* module directives */
NGX_CORE_MODULE,                       /* module type */
NULL,                                  /* init master */
NULL,                                  /* init module */
NULL,                                  /* init process */
NULL,                                  /* init thread */
NULL,                                  /* exit thread */
NULL,                                  /* exit process */
NULL,                                  /* exit master */
NGX_MODULE_V1_PADDING
};


ngx_module_t  ngx_events_module = {
NGX_MODULE_V1,
&ngx_events_module_ctx,                /* module context */
ngx_events_commands,                   /* module directives */
NGX_CORE_MODULE,                       /* module type */
NULL,                                  /* init master */
NULL,                                  /* init module */
NULL,                                  /* init process */
NULL,                                  /* init thread */
NULL,                                  /* exit thread */
NULL,                                  /* exit process */
NULL,                                  /* exit master */
NGX_MODULE_V1_PADDING
};


ngx_module_t  ngx_http_module = {
NGX_MODULE_V1,
&ngx_http_module_ctx,                  /* module context */
ngx_http_commands,                     /* module directives */
NGX_CORE_MODULE,                       /* module type */
NULL,                                  /* init master */
NULL,                                  /* init module */
NULL,                                  /* init process */
NULL,                                  /* init thread */
NULL,                                  /* exit thread */
NULL,                                  /* exit process */
NULL,                                  /* exit master */
NGX_MODULE_V1_PADDING
};


ngx_module_t  ngx_mail_module = {
NGX_MODULE_V1,
&ngx_mail_module_ctx,                  /* module context */
ngx_mail_commands,                     /* module directives */
NGX_CORE_MODULE,                       /* module type */
NULL,                                  /* init master */
NULL,                                  /* init module */
NULL,                                  /* init process */
NULL,                                  /* init thread */
NULL,                                  /* exit thread */
NULL,                                  /* exit process */
NULL,                                  /* exit master */
NGX_MODULE_V1_PADDING
};
2) 上面几个核心模块的上下文都是ngx_core_module_t类型的,而他们这些核心模块内的子模块的上下文是不一样的,一会下面介绍;看了下面的代码,你会发现只有http模块、event模块等都是只有一个上下文的name;

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;


static ngx_core_module_t  ngx_events_module_ctx = {
ngx_string("events"),
NULL,
ngx_event_init_conf
};


static ngx_core_module_t  ngx_core_module_ctx = {
ngx_string("core"),
ngx_core_module_create_conf,
ngx_core_module_init_conf
};


static ngx_core_module_t  ngx_http_module_ctx = {
ngx_string("http"),
NULL,
NULL
};


<pre name="code" class="html">static ngx_core_module_t  ngx_mail_module_ctx = {
ngx_string("mail"),
NULL,
NULL
};



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: