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 學習的總結

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM