最后要说明的是,无论如何,Nginx 的配置指令的参数个数不可以超过 NGX_CONF_MAX_ARGS 个 。目前这个值被定义为 8,也就是不能超过 8 个参数值 。
下面介绍一组说明配置指令可以出现的位置的属性 。
- NGX_DIRECT_CONF:可以出现在配置文件中最外层 。例如已经提供的配置指令 daemon,master_process 等 。
- NGX_MAIN_CONF: http、mail、events、error_log 等 。
- NGX_ANY_CONF: 该配置指令可以出现在任意配置级别上 。
- NGX_HTTP_MAIN_CONF: 可以直接出现在 http 配置指令里 。
- NGX_HTTP_SRV_CONF: 可以出现在 http 里面的 server 配置指令里 。
- NGX_HTTP_LOC_CONF: 可以出现在 http server 块里面的 location 配置指令里 。
- NGX_HTTP_UPS_CONF: 可以出现在 http 里面的 upstream 配置指令里 。
- NGX_HTTP_SIF_CONF: 可以出现在 http 里面的 server 配置指令里的 if 语句所在的 block 中 。
- NGX_HTTP_LMT_CONF: 可以出现在 http 里面的 limit_except 指令的 block 中 。
- NGX_HTTP_LIF_CONF: 可以出现在 http server 块里面的 location 配置指令里的 if 语句所在的 block 中 。
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);先看该函数的返回值,处理成功时,返回 NGX_OK,否则返回 NGX_CONF_ERROR 或者是一个自定义的错误信息的字符串 。
再看一下这个函数被调用的时候,传入的三个参数 。
- cf: 该参数里面保存从配置文件读取到的原始字符串以及相关的一些信息 。特别注意的是这个参数的args字段是一个 ngx_str_t类型的数组,该数组的首个元素是这个配置指令本身,第二个元素是指令的第一个参数,第三个元素是第二个参数,依次类推 。
- cmd: 这个配置指令对应的 ngx_command_t 结构 。
- conf: 就是定义的存储这个配置值的结构体,比如在上面展示的那个 ngx_http_hello_loc_conf_t 。当解析这个 hello_string 变量的时候,传入的 conf 就指向一个 ngx_http_hello_loc_conf_t 类型的变量 。用户在处理的时候可以使用类型转换,转换成自己知道的类型,再进行字段的赋值 。
- ngx_conf_set_flag_slot: 读取 NGX_CONF_FLAG 类型的参数 。
- ngx_conf_set_str_slot:读取字符串类型的参数 。
- ngx_conf_set_str_array_slot: 读取字符串数组类型的参数 。
- ngx_conf_set_keyval_slot: 读取键值对类型的参数 。
- ngx_conf_set_num_slot: 读取整数类型(有符号整数 ngx_int_t)的参数 。
- ngx_conf_set_size_slot:读取 size_t 类型的参数,也就是无符号数 。
- ngx_conf_set_off_slot: 读取 off_t 类型的参数 。
- ngx_conf_set_msec_slot: 读取毫秒值类型的参数 。
- ngx_conf_set_sec_slot: 读取秒值类型的参数 。
- ngx_conf_set_bufs_slot: 读取的参数值是 2 个,一个是 buf 的个数,一个是 buf 的大小 。例如: output_buffers 1 128k;
- ngx_conf_set_enum_slot: 读取枚举类型的参数,将其转换成整数 ngx_uint_t 类型 。
- ngx_conf_set_bitmask_slot: 读取参数的值,并将这些参数的值以 bit 位的形式存储 。例如:HttpDavModule 模块的 dav_methods 指令 。
offset: 指定该配置项值的精确存放位置,一般指定为某一个结构体变量的字段偏移 。因为对于配置信息的存储,一般我们都是定义个结构体来存储的 。那么比如我们定义了一个结构体 A,该项配置的值需要存储到该结构体的 b 字段 。那么在这里就可以填写为 offsetof(A, b) 。对于有些配置项,它的值不需要保存或者是需要保存到更为复杂的结构中时,这里可以设置为 0 。
推荐阅读
- 通过监控DNS记录,来保护网站的几种方式?你需要了解
- 细说HTTP协议及其工作流程
- 5 种用 CSS 隐藏页面元素的方法
- 瓷砖用什么擦会发亮,瓷砖脏的发黑怎么清理
- 什么是窗户的k值,门窗k值一般是多少
- 床单用法兰绒的好吗,婴儿能睡法兰绒床单吗
- 科技布沙发能不能买,买沙发科技布的好还是真皮的好
- 淘宝开店新手教程 淘宝开店的详细步骤
- 发型|国产护肤品哪个好用 十款效果最好的国货护肤品盘点
- 味道别具格的布依族姑娘茶