nginx 变量学习

1、nginx改变编译选项,或增加模块

     niginx -V 可见版本信息,以及目前的编译信息

     重新configure make make install 会覆盖安装,但不会覆盖nginx.conf

 

 

2、设置用户变量

     set $a ‘hi’;

     (set会在进入{}时执行,类似js中预加载)

     

 

3、安装echo组件,在编译时,加上--add-module=/path…

     http://wiki.nginx.org/HttpEchoModule#Installation

 

 

4、服务器内部跳转location间set的变量是互相可见的,以一个请求为生命周期。

 

     location /a {

          set $a 'hi';

          rewrite ^ /b;     //内不跳转,不是301、302,浏览器端无察觉

     }

 

     location /b {

          echo $a;  //可见

     }

 

5、一些nginx预设变量

 

     http://localhost/soda?xx=xiaoxuan

 

     $uri     '/soda'     (经过解码,不含参数)

     $request_uri     '/soda?xx=xiaoxuan'     (原始请求,未解码,含参数)  

     $arg_xx     ‘xiaoxuan’     (对应参数key的值)

     $http_xx     (请求头中的变量群)

     $cookie_xx     (cookie变量群)

     $send_http_xx     (相应头中的变量群)

 

6、不要set nginx 自建变量的值,会出现崩溃或未知错误(少数变量除外,如args)

     

     对args的重新set值,会影响部分变量。

          -- 不会影响$uri, $request_url

          -- 会影响$arg_xx

 

     eg:

          location /soda{

               set $org_arg_a $arg_a;

               set $args 'a=1';

 

               echo 'org a : $org_arg_a';

               echo 'a : $arg_x';      

          }

     

      out : 

          curl 'http://localhost/soda/a=6'

          

          org a : 6

          a : 1

 

 

7、对$args的改写会影响proxy_pass

 

 

8、nginx对变量的读取,有两种:indexed or unindexed

     比如$args $ary_xx就是unindexed,即用的时候才去那块静态内存读取实时的值(可能已经被改写),类似的还有$cookie_xx

 

 

9、map 

     -- 仅在http段内使用

     -- 仅用到map的变量时才会映射(惰性求值),并且仅第一次用到时映射并缓存,后续对变量值的更改,不会影响之前映射的值

     

     eg:

     

     http{

          map $args $foo {

               default 0;

               soda 1;

          }

          server { 

               listen 80;

               location /soda {    

                    set $org_foo $foo;

                    set $args 'soda';

                    echo '$org_foo : $org_foo';

                    echo '$foo';

               }

          }

     }

 

     curl 'http://localhost/soda?soda'

     1 : 1

     1

 

     curl 'http://localhost/soda?xx'

     0 : 0

     0

 

     加载时,用到$foo变量(惰性,如果不用则不map),去map变量并缓存,然后set $args已经没用的

 

 

10、主动求值

     set $a '$b $b';

     这句则会在‘预加载’的过程就求值,而不是用到时才去惰性求值

 

 

ps:此文是对 http://blog.sina.com.cn/s/articlelist_1834459124_0_1.html 学习的总结

   

posted @ 2012-08-14 18:31  王冶soda  阅读(5420)  评论(0编辑  收藏  举报