1. map指令映射变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| map $args $foo { #$foo变量跟随$args变量变化 default 0; debug 1; }
server { listen 8080;
location /test { set $orig_foo $foo; set $args debug; #此时强行更改$args变量为debug字符串,map指令确实映射了,但后面读取 #$foo变量是取的缓存,如果请求没有带参数,缓存就是0,如果参数是字符串debug,$foo就为1
echo "original foo: $orig_foo"; echo "foo: $foo"; } } curl localhost/test 输出: original foo: 0 foo: 0 curl localhost/test?debug输出: original foo: 1 foo: 1
|
2.父请求与子请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| location /main { set $var main;
echo_location /foo; echo_location /bar;
echo "main: $var"; }
location /foo { set $var foo; echo "foo: $var"; }
location /bar { set $var bar; echo "bar: $var"; }
|
$var分别输出foo bar main,而auth_request模块中父子请求共享变量容器
1 2 3 4 5 6 7 8 9 10
| location /main { set $var main; auth_request /sub; echo "main: $var"; }
location /sub { set $var sub; echo "sub: $var"; }
|
输出 main: sub
大部分内建变量作用于当前请求,少数内建变量只作用于主请求,$request_method只作用于主请求