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   感谢大师大师

 

 

posted @ 2012-08-16 09:22  王冶soda  阅读(337)  评论(0编辑  收藏  举报