本节我们讲述nginx配置文件相关的一些内容。
1. 配置类型相关宏定义
下面我们介绍一下各宏定义的相关含义:
1) 配置指令属性
-
NGX_CONF_NOARGS
: 配置指令不接受任何参数
-
NGX_CONF_TAKE1
: 配置指令接受1个参数
-
NGX_CONF_TAKE2
: 配置指令接受2个参数
-
NGX_CONF_TAKE3
: 配置指令接受3个参数
-
NGX_CONF_TAKE4
: 配置指令接受4个参数
-
NGX_CONF_TAKE5
: 配置指令接受5个参数
-
NGX_CONF_TAKE6
: 配置指令接受6个参数
-
NGX_CONF_TAKE7
: 配置指令接受7个参数
-
NGX_CONF_MAX_ARGS
: nginx配置指令最大参数大小,目前该值被定义为8,也就是不能超过8个参数值
关于参数个数,可以组合多个属性。比如一个指令可以不填参数,也可以接受1个或者2个参数。那么就是:
如果写上面3个属性在一起,可能会觉得麻烦,因此nginx提供了一些定义,使用起来更简洁:
-
NGX_CONF_TAKE12
: 配置指令接受1个或2个参数
-
NGX_CONF_TAKE13
: 配置指令接受1个或3个参数
-
NGX_CONF_TAKE23
: 配置指令接受2个或3个参数
-
NGX_CONF_TAKE123
: 配置指令接受1个或2个或3个参数
-
NGX_CONF_TAKE1234
: 配置指令接受1个或2个或3个参数
-
NGX_CONF_ARGS_NUMBER
: 用于取参数个数的宏定义
-
NGX_CONF_BLOCK
: 配置指令可以接受的值是一个配置信息块。也就是一对大括号括起来的内容。里面可以再包括很多的配置指令,比如常见的server指令就是这个属性的:
http {
...
server {
listen 8000;
server_name somename alias another.alias;
location / {
root html;
index index.html index.htm;
}
}
....
}
-
NGX_CONF_FLAG
: 配置指令可以接受的值是on
或者off
,最终会被转成bool值
-
NGX_CONF_ANY
: 配置指令可以接受任意参数值。一个或者多个,或者on
,或者off
,或者是配置块
-
NGX_CONF_1MORE
: 配置指令至少接受1个参数
-
NGX_CONF_2MORE
: 配置指令至少接受2个参数
-
NGX_CONF_MULTI
: 配置指令可以接受多个参数,即个数不定(但是应确保不超过NGX_CONF_MAX_ARGS
)
下面介绍一组说明配置指令可以出现的位置的属性:
-
NGX_DIRECT_CONF
: 配置指令只能出现在主配置文件中
-
NGX_MAIN_CONF
: 配置指令只能出现在主配置级别,例如http、mail、events、error_log等配置指令
-
NGX_ANY_CONF
: 该配置指令可以出现在任意配置级别上。
注意: 除此之外,还有如下一些用于指定配置指令出现位置的宏
NGX_HTTP_MAIN_CONF: 配置指令只能出现在http-server主配置级别
NGX_HTTP_SRV_CONF: 配置指令只能出现在http-server的虚拟主机配置级别
NGX_HTTP_LOC_CONF: 配置指令只能出现在http-server的location配置级别
NGX_HTTP_LMT_CONF: 配置指令只能出现在limit_except块中
NGX_HTTP_LIF_CONF: 配置指令只能出现在if()块中
2) 其他配置相关宏定义
属于NGX_CORE_MODULE
类型的模块主要有:
注意:
nginx模块虽然有很多,但是基本类型只有5种: CORE、CONF、EVENT、HTTP、MAIL
#define NGX_CORE_MODULE 0x45524F43 /* "CORE" */
#define NGX_CONF_MODULE 0x464E4F43 /* "CONF" */
#define NGX_EVENT_MODULE 0x544E5645 /* "EVNT" */
#define NGX_HTTP_MODULE 0x50545448 /* "HTTP" */
#define NGX_MAIL_MODULE 0x4C49414D /* "MAIL" */
2. 相关数据结构定义
1) ngx_command_s数据结构
各成员含义如下:
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1
这就表示该指令用于main上下文; 且是属于main上下文的简单指令; 该指令后跟一个参数,例如: worker_processes 1;
-
set
: 函数指针set用来表示,当nginx解析配置文件碰到此指令时,该执行怎样的操作。而该操作本身,自然是用来设置本模块所对应的ngx_<module_name>_conf_t
结构体。
-
conf
: 这个变量只在NGX_HTTP_MODULE
类型模块的ngx_command_t
使用,指定当前配置项存储的内存位置。实际上是使用哪个内存池的问题。因为http模块对所有该模块要保存的信息划分了main、server、location三个地方进行存储,每个地方都有一个内存池用来分配存储这些信息的内存。这里可能的取值为:
GX_HTTP_MAIN_CONF_OFFSET、NGX_HTTP_SRV_CONF_OFFSET或NGX_HTTP_LOC_CONF_OFFSET
2) ngx_null_command宏
一般作为ngx_command_s配置数组的结束标志
3) ngx_open_file_s数据结构
ngx_open_file_s
代表一个已打开的文件,各成员含义如下:
4) ngx_conf_file_t数据结构
各成员含义如下:
5) ngx_conf_dump_t数据结构
dump配置文件时用到。
6) ngx_conf_s数据结构
各成员含义如下:
-
name
: 存放当前所解析到的指令
-
args
: 存放该指令包含的所有参数。args[0]存放的是指令本身
-
cycle
: 所关联的全局ngx_cycle_t变量
-
pool
: 所关联的内存池
-
temp_pool
: 用于解析配置文件的临时内存池,解析完后释放
-
conf_file
: 存放nginx配置文件相关信息
-
log
: 描述日志文件的相关属性
-
ctx
: 描述指令的上下文信息
-
module_type
: 当前指令所属模块类型,core、http、event和mail中的一种
-
cmd_type
: 指令的类型
-
handler
: 指令自定义的处理函数
-
handler_conf
: 自定义处理函数需要的相关配置
7) ngx_conf_deprecated_t数据结构
主要用于处理nginx中的过时指令
8) ngx_conf_num_bounds_t数据结构
对nginx配置指令取值的上下界的封装
9) ngx_conf_enum_t数据结构
配置中的枚举结构。
9) ngx_conf_bitmask_t数据结构
配置中的位掩码结构
10) 相关函数
3. 配置的默认初始化相关宏定义
4. 相关函数声明
[参看]:
-
handler模块(100%)
-
Nginx配置参数说明
-
Nginx 源码分析:从模块到配置(下)
-
图解Nginx 中的4级指针
-
nginx源码分析之配置图解
-
Difference between NGX_DIRECT_CONF and NGX_MAIN_CONF
-
Nginx配置文件详解
-
Nginx简介及配置文件详解
-
Configuration directives
-
Core functionality