nginx模块和指令

nginx.conf文件由指令组成;

指令分两种类型:block指令和非block指令;

block指令后面带一对大括号,大括号中可以包含多个指令;

ngx_modules数组包含所有注册模块,每个模块可以有一组指令;

ngx_conf_t::ctx是一个指针:

该指针指向一个数组,数组元素是指向void *数组的指针;

含义类似void **context_array[N],N为context类型数;

context_array[i]是指向大小为X的void *数组,X为子模块数目;

以events为例,N=1,即其为void **类型;

以http模块为例,N=3:

 17 typedef struct {
 18     void        **main_conf;   /* main conf类型数组 */
 19     void        **srv_conf;    /* server conf类型数组 */
 20     void        **loc_conf;    /* location conf类型数组 */
 21 } ngx_http_conf_ctx_t;

指令定义如下;

78 struct ngx_command_s {
79     ngx_str_t             name;
80     ngx_uint_t            type;
81     char               *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
82     ngx_uint_t            conf;
83     ngx_uint_t            offset;
84     void                 *post;
85 };
name是指令名字,全局唯一;

type是指令类型,通过其控制指令的使用域,在加载配置时,将其和ngx_conf_t::cmd_type进行匹配过滤,达到选择性加载目的;

set是回调函数;

conf是指出该指令操作的struct所处的数组的偏移量,即(void **)(((char *)ctx) + conf)),再加上其所属模块的ctx_index就可以定位其操作的struct;

offset是指该指令操作的数据在struct中的偏移量;

post在不同命令中有不同含义,可以是一个回调函数,在命令执行完毕后调用,也可以是一个enum数组;


在解析配置时,设置ngx_conf_t::module_type和ngx_conf_t::cmd_type来限定合法指令集;

上级模块通过设置ngx_conf_t::module_type来加载其子模块;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值