nginx 变量学习2
1、nginx中变量的生命周期是与请求绑定的。
2、nginx的请求,分为 ‘父请求’ 和 ‘子请求’ ,子请求由父请求产生。在服务器内部实现。
eg:
location /soda {
set $var 'soda'
echo_location /a1;
echo_location /a2;
echo $var;
}
location /a1 {
set $var 'a1';
echo $var;
}
location /a2 {
set $var 'a2';
echo $var;
}
out:
curl 'http://localhost/soda'
a1
a2
soda
可见,子请求虽然是由父请求产生,但还是每个请求有自己的变量环境副本,互不干扰。包括$args、$uri, 等变量都是负责隔离的
3、当然,部分第三方模块,与此规律相反,父子请求间共有变量环境,一旦修改,都会影响,如auth_request模块(第三方)
4、特别的,auth_request中,会忽略子请求的相应体,仅检查返回状态码。
如果子请求状态码是2xx,父请求忽略子请求相应体,继续执行;否则会终止请求,返回错误页
5、echo_location 发出的子请求,是get
6、$request_method, $request_uri 即使发生子请求,值也都是父请求的值。可用$echo_request_method, $echo_request_uri解决,保证负责请求这两个变量的准确性
7、nginx中的变量值,都是字符串形式(除非加入第三方模块)。另外,nil(null)为赋值的状态。这个会出现在配置文件中有set,但用时却在用之后。与js的预处理类似。因此只要有此变量的set,就不会报错,即使调用时,还没set。会是空字符串,并在error.log中报错。
学习整理自http://blog.sina.com.cn/s/articlelist_1834459124_0_1.html 感谢大师大师