11.2.1 type成员

时间 : 16-03-29 栏目 : nginx专题 作者 : 老薛 评论 : 0 点击 : 874 次

type成员实际上由32位的无符号整型数组成,用来表示该指令在配置文件中的合法位置和可接受参数个数的标示符集合,前面16位表示指令的位置,后面16位表示参数个数。各位代表的含义如图11.1所示。

1. 表示合法位置的宏定义

Nginx预先定义好的表示指令合法位置的宏定义根据模块所属的类型不同,分布在不同的文件中。

属于core类的模块,它支持的指令的合法位置以及寻址方式的宏定义可以在/nginx/src/core/ngx_ conf_file.h文件中找到:
 

    #define NGX_DIRECT_CONF   0x00010000                            //直接寻址方式  
    #define NGX_MAIN_CONF     0x01000000                            //在全局块中(寻址)  
    #define NGX_ANY_CONF      0x0F000000  

属于http类的模块,它支持的指令的合法位置的宏定义可以在/nginx/src/http/ngx_http_config.h文件中找到:
 

    #define NGX_HTTP_MAIN_CONF  0x02000000                  //在http块中(寻址)  
    #define NGX_HTTP_SRV_CONF  0x04000000                       //在server块中(寻址)  
    #define NGX_HTTP_LOC_CONF  0x08000000                       //在location块中(寻址)  
    #define NGX_HTTP_UPS_CONF  0x10000000                       //在upstream块中(寻址)  
    #define NGX_HTTP_SIF_CONF   0x20000000  
    #define NGX_HTTP_LIF_CONF   0x40000000  
    #define NGX_HTTP_LMT_CONF  0x80000000  

注意

这里的server块、location块和upstream块的父指令块是http块。

属于event类的模块,它支持的指令的合法位置的宏定义可以在/nginx/src/event/ngx_event.h文件中找到:
 

    #define NGX_EVENT_CONF    0x02000000                        //在event块中(寻址)

属于mail类的模块,它支持的指令的合法位置的宏定义可以在/nginx/src/mail/ngx_mail.h文件中找到:
 

    #define NGX_MAIL_MAIN_CONF    0x02000000                    //在mail块中(寻址)  
    #define NGX_MAIL_SRV_CONF     0x04000000                    //在server块中(寻址)  

注意

这里的server块的父指令块是mail块。

上面的这些宏定义,从名字上可以直接判断出其代表的意义,笔者不再赘述。这些宏可以构成指令类型type的前16位标示符。

2. 表示参数个数的宏定义

在/nginx/src/core/ngx_conf_file.h文件中可以找到Nginx预先定义好的表示指令可接受参数个数的宏定义:
 

                                                                //指令接受参数的个数  
    #define NGX_CONF_NOARGS     0x00000001                      //不接受参数  
    #define NGX_CONF_TAKE1       0x00000002                     //接受1个参数  
    #define NGX_CONF_TAKE2       0x00000004                     //接受2参数  
    #define NGX_CONF_TAKE3       0x00000008                     //接受3个参数  
    #define NGX_CONF_TAKE4       0x00000010                     //接受4个参数  
    #define NGX_CONF_TAKE5       0x00000020                     //接受5个参数  
    #define NGX_CONF_TAKE6       0x00000040                     //接受6个参数  
    #define NGX_CONF_TAKE7       0x00000080                     //接受7个参数  
    #define NGX_CONF_TAKE12      (NGX_CONF_TAKE1|NGX_CONF_TAKE2)  
                                                                //接受1个或2个参数  
    #define NGX_CONF_TAKE13      (NGX_CONF_TAKE1|NGX_CONF_TAKE3)  
                                                                //接受1个或3个参数  
    #define NGX_CONF_TAKE23      (NGX_CONF_TAKE2|NGX_CONF_TAKE3)  
                                                                //接受2个或3个参数  
    #define NGX_CONF_TAKE123     (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3)  
                                                            //接受1个、2个或3个参数  
    #define NGX_CONF_TAKE1234    (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3   \  
                                     |NGX_CONF_TAKE4)  
                                                        //接受1个、2个、3个或4个参数  
    #define NGX_CONF_ARGS_NUMBER  0x000000ff                //可接受的参数个数的上限  
    #define NGX_CONF_1MORE      0x00000800              //接受1个或1个以上参数  
    #define NGX_CONF_2MORE      0x00001000              //接受2个或2个以上参数  
    #define NGX_CONF_MULTI       0x00000000               
                                                        //指令形成的块域  
    #define NGX_CONF_BLOCK       0x00000100             //形成指令块域的指令  
    #define NGX_CONF_FLAG        0x00000200             //可接受boolean参数  
    #define NGX_CONF_ANY         0x00000400  

NGX_CONF_NOARGS,表示该指令不接受任何参数。

NGX_CONF_TAKE1 ~ NGX_CONF_TAKE7,表示该指令接受1~7个参数。

NGX_CONF_TAKE12,表示该指令接收1个或者2个参数,注意不是接受12个参数。类似的宏还有NGX_CONF_TAKE13、NGX_CONF_TAKE23、NGX_CONF_TAKE123和NGX_ CONF_TAKE1234等。

NGX_CONF_1MORE,表示该指令至少接受1个参数,类似的宏还有NGX_CONF_2MORE。

NGX_CONF_BLOCK,表示该指令形成块域,比如我们前面学习的http块、server块等。

NGX_CONF_FLAG,表示该指令可以接受布尔参数(配置中一般使用on和off)。

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/nginx-2/1535.html

11.2.1 type成员:等您坐沙发呢!

发表评论

5 + 3 = ?


博主微信号,很高兴为您提供帮助

随便看看

为您推荐

0