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来计算的,所以变量名是没有大小写区分的。
通过获取变量的函数,我们可以看到,变量是与请求相关的,也就是获取的变量都是与当前请求相关的。
0 0
原创粉丝点击