nginx模块使用自定义变量
来源:互联网 发布:沈阳网络优化 编辑:程序博客网 时间:2024/05/21 11:38
在模块中,我们要使用一个自定义的变量。
1、 首先,需要添加一个变量
调用ngx_http_add_variable函数来添加一个变量,添加时指明变量的名称和变量类型。
ngx_http_variable_t *
ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags);
name: 即变量的名字
flags: 如果同一个变量要多次添加,则flags应该设置NGX_HTTP_VAR_CHANGEABLE
否则,多次添加将会提示重复
flags表示可以是:NGX_HTTP_VAR_CHANGEABLE
NGX_HTTP_VAR_NOCACHEABLE
NGX_HTTP_VAR_INDEXED
NGX_HTTP_VAR_NOHASH
2、 然后,获取变量
要获取变量,如果要高效一点,可以先将该变量放到索引数组,通过ngx_http_get_variable_index来添加一个变量的索引:
ngx_int_t ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name);
// name: 即nginx支持的任意变量名
// 返回该变量的索引
通过该接口操作添加的变量必须是nginx支持的已存在的变量。如果是hash过的变量,则一定是通过ngx_http_add_variable添加的变量,否则,一定是规则变量,如”http_host”。
索引变量的获取,可以通过ngx_http_get_indexed_variable与ngx_http_get_flushed_variable来获取。
ngx_http_variable_value_t *
ngx_http_get_indexed_variable(ngx_http_request_t *r, ngx_uint_t index);
ngx_http_variable_value_t *
ngx_http_get_flushed_variable(ngx_http_request_t *r, ngx_uint_t index);
而如果没有索引过的变量,则只能通过ngx_http_get_variable函数来获取了。
// key 由ngx_hash_strlow来计算
ngx_http_variable_value_t *ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key);
key是通过ngx_hash_strlow来计算的,所以变量名是没有大小写区分的。
通过获取变量的函数,我们可以看到,变量是与请求相关的,也就是获取的变量都是与当前请求相关的。
1、 首先,需要添加一个变量
调用ngx_http_add_variable函数来添加一个变量,添加时指明变量的名称和变量类型。
ngx_http_variable_t *
ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags);
name: 即变量的名字
flags: 如果同一个变量要多次添加,则flags应该设置NGX_HTTP_VAR_CHANGEABLE
否则,多次添加将会提示重复
flags表示可以是:NGX_HTTP_VAR_CHANGEABLE
NGX_HTTP_VAR_NOCACHEABLE
NGX_HTTP_VAR_INDEXED
NGX_HTTP_VAR_NOHASH
2、 然后,获取变量
要获取变量,如果要高效一点,可以先将该变量放到索引数组,通过ngx_http_get_variable_index来添加一个变量的索引:
ngx_int_t ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name);
// name: 即nginx支持的任意变量名
// 返回该变量的索引
通过该接口操作添加的变量必须是nginx支持的已存在的变量。如果是hash过的变量,则一定是通过ngx_http_add_variable添加的变量,否则,一定是规则变量,如”http_host”。
索引变量的获取,可以通过ngx_http_get_indexed_variable与ngx_http_get_flushed_variable来获取。
ngx_http_variable_value_t *
ngx_http_get_indexed_variable(ngx_http_request_t *r, ngx_uint_t index);
ngx_http_variable_value_t *
ngx_http_get_flushed_variable(ngx_http_request_t *r, ngx_uint_t index);
而如果没有索引过的变量,则只能通过ngx_http_get_variable函数来获取了。
// key 由ngx_hash_strlow来计算
ngx_http_variable_value_t *ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key);
key是通过ngx_hash_strlow来计算的,所以变量名是没有大小写区分的。
通过获取变量的函数,我们可以看到,变量是与请求相关的,也就是获取的变量都是与当前请求相关的。
0 0
- nginx模块使用自定义变量
- nginx 自定义模块
- nginx核心模块内置变量
- nginx模块开发-增加nginx内置变量
- nginx 自定义带参数模块
- nginx变量的使用
- Nginx内部变量使用
- nginx 自定义协议 扩展模块开发
- nginx Makefile中添加编译自定义模块
- 实现第一个自定义nginx模块
- Linux下Nginx自定义模块开发
- Nginx之http_image_filter_module模块使用
- nginx 限速模块的使用
- Nginx 配置文件Nginx.conf变量使用详解
- python学习(2):自定义包结构及__init__.py模块和__all__变量的使用
- 模块的使用和自定义模块
- 自定义变量 AttributeSet的使用
- DEDECMS 自定义变量的使用
- linux中chmod一次只能赋值一个权限
- appium滑动操作
- 《iOS Human Interface Guidelines》——Modal Contexts
- iOS开发001 深入学习:华丽的#define
- 检测特殊字符的正则
- nginx模块使用自定义变量
- Deep Learning(深度学习)学习笔记整理系列之(一)
- Android性能专项测试之Allocation Tracker(Android Studio)
- 第7周 项目3 - 负数把正数赶出队列
- DWZ富客户端框架使用
- Hive SQL的编译过程
- Mac上,执行定时脚本:launchctl
- Java FileInputStream与FileReader的区别
- pyqt4中对话框模态和非模态