nginx(4)变量转载自章亦春
来源:互联网 发布:自制简易linux操作系统 编辑:程序博客网 时间:2024/06/12 19:04
在设置了"取处理程序“的时候,nginx变量也可以选择将其值容器用作缓存,这样在多次读取变量的时候,就只需要调用”取处理程序“计算一次。我们下面就来看这样的例子:
map $args $foo {
default 0;
debug 1;
}
server {
listen 8080;
location /test {
set $orig_foo $foo;
set $args debug;
echo "original foo:$orig_foo";
echo "foo: $foo";
}
}
这里首次用到标准ngx_map模块的map这配置指令,我们有必要在这里介绍一下。map英文除了”地图“的意思,还有”映射“的意思。比方说,中学数学中讲的”函数“就是一种”映射“。而nginx的这个map指令就可以用于定义两个nginx变量之间的映射关系,或者说是函数关系。回到上面的这个例子,我们用map指令定义了用户变量$foo与内建变量之间的映射关系。特别地,用数学上的函数记法y=f(x)来说,我们的$args就是”自变量“x,而$foo则是”因变量y,即$foo 的值是由$args的值来决定的,或着按照书写的顺序可以说,我们讲$args变量的值映射到了$foo变量上。
现在我们再来看map指令定义的映射规则:
map $args $foo{
default 0;
debug 1;
}
花括号中第一行的default是一个特殊的匹配条件,即当其他条件都不匹配时候,这个条件才匹配。当这个默认条件匹配时,就把“因变量”$foo映射到值0.而花括号中第二行的意思是说,如果“自变量”$args精确匹配了debug这个字符串,则把"因变量“ $foo 映射到值1.讲这两行合起来,我们就得到了如下完整的映射规则:当$args的值等于debug的时候,$foo 变量的值就是1,否则$foo 的值就是0。
明白了map指令的含义,再来看location /test。在那里,我们先把当前$foo变量的值保存在另一个用户变量$orig_foo中,然后在强行把$args的值改写为debug,最后我们再用echo指令分别输出$orig_foo和$foo的值。
从逻辑上来看,视乎当我们强行改写$args的值为debug之后,根据先前的map映射规则,$foo变量此时的值应当自动调整为字符串1,而不论$foo原先的值是怎么样的。然而测试结果并非如此:
$ curl 'http://localhost"8080/test'
original foo : 0
foo :0
第一行输出指示$orig_foo的值为0,这正是我们期望的:上面的这个请求并没有提供URL参数串,于是$args最初的取值就是空,再根据我们先前定义定义的映射规则,$foo变量再第一次被读取时的值就应当时0(即匹配默认的那个default条件)。
而第二行输出显示,在强行改写$args变量的值为字符串debug之后,$foo 的条件仍然是0,这显然不符合映射规则,应为当$args为debug之后,$foo的值应当是1.这究竟是怎么回事?
就是在$foo 变量在第一次读取时,根据映射规则计算出的值被缓存住了。刚才我们说过,nginx模块可以为其创建的变量选择使用值容器,作为其”取处理程序“计算结果的缓存。显然,ngx_map模块认为变量间的映射计算足够再次读取这个因变量,nginx就可以直接返回缓存住的结果,而不再调用该变量的”取处理程序“再行计算了。
- nginx(4)变量转载自章亦春
- nginx变量(1)转载自章亦春
- nginx(2)变量转载自章亦春
- nginx(3)变量转载自章亦春
- nginx(5)变量转载自章亦春
- nginx(6)变量转载自章亦春
- nginx(五)自带变量
- nginx(8)变量转载子章亦春
- 临时表和表变量,转载自博客园
- 变量的定义与声明(转载自周公)
- apache nginx比较(转载)
- nginx整合fastdfs(转载)
- 自绘按钮(转载)
- symbian自签名(转载)
- MapReduce(转载自百度)
- nginx变量使用方法详解(4)
- Nginx 变量漫谈(一)
- Nginx 变量漫谈(二)
- LeetCode 55. Jump Game & 45. Jump Game II题解
- Servlet的映射路径
- (HDOJ)1004——今年暑假不AC(贪心)
- API Namespace metric
- 最大子列和问题(20 分)
- nginx(4)变量转载自章亦春
- 面向对象设计七大原则
- 每日一练20171026
- 17.5W秒级交易峰值下的混合云弹性架构之路
- C++和C#有关值类型和引用类型,以及对引用类型使用ref的效果
- zabbix监控redis
- aaaaa
- Android自定义控件5----继承View通讯录索引功能之1初始化显示字母列表
- 前端代码合集