0%

NGINX 变量

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只作用于主请求