nginx源码初读(11)--让烦恼从数据结构开始(ngx_command/ngx_module/ngx_conf)

本文介绍了nginx源码中的关键数据结构,包括ngx_command_t用于表示模块指令,ngx_module_t用于定义模块信息,以及ngx_conf_t在解析配置文件时的角色。这些数据结构是理解nginx模块开发和配置处理的基础。
摘要由CSDN通过智能技术生成

第一点:ngx_command_t
ngx_core_commands是nginx中的核心模块指令, 它的类型就是ngx_command_t。在每一个module的结构体中,也都有一个ngx_command_t。

typedef struct ngx_command_s     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);
    /*  当nginx在解析配置的时候,如果遇到这个配置指令,将会把读取到的值传递给这个函数进行解析保存。
        因为具体每个配置指令的值如何处理,只有定义这个配置指令的人是最清楚的,set可能复杂也可能很简单。
        比如errlog模块的“error_log”指令就是调用ngx_error_log写一条日志,并不需要存储什么配置数据。
     *  cf: 保存从配置文件读取到的原始字符串以及相关信息。这个参数的args字段是一个ngx_str_t类型的数组,
            该数组首元素是这个配置指令本身,第二个元素开始才是参数。
        cmd: 这个配置指令对应的ngx_command_t结构。
        conf: 就是定义的存储这个配置值的结构体
     */   

    ngx_uint_t            conf;
    /* 该字段被NGX_HTTP_MODULE类型模块所用,指定当前配置项存储的内存位置。实际上是使用哪个内存池的问题。
       因为http模块对所有http模块所要保存的配置信息,划分了main, server和location三个地方进行存储,
       每个地方都有一个内存池用来分配存储这些信息的内存。
       这里可能的值为NGX_HTTP_MAIN_CONF_OFFSET、NGX_HTTP_SRV_CONF_OFFSET或NGX_HTTP_LOC_CONF_OFFSET。
       当然也可以直接置为0,就是N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值