首頁  >  文章  >  後端開發  >  nginx 變數

nginx 變數

WBOY
WBOY原創
2016-08-08 09:26:501101瀏覽

詳細原文查看這裡:http://blog.sina.com.cn/s/blog_6d579ff40100wk2j.html

另一篇歸納原文的文章看這裡:http://blog.csdn.net/yankai0219/ article/details/8070790

變數內插:

所有的 Nginx帶都在檔案中都被引用 前綴,用 $符號+變數名稱來建構新的變量,這種方式叫做變數內插。 例如:location test{

    set $a hello;

"b: $b";

}

訪問:

curl http://localhost/test/

輸出:b: hellop world

Module

的指令,而echoHttpEchoModule指令。可見這兩個模組都支援變數插值。 但是並不是所有模組都支援變數插值,事實上,指令參數是否允許變數插值,取決於該指令的實作模組。 量使用注意點:當變數後面直接接其他字串時,需要用{}將變數名括起來,否則會將變數名稱和後面的連變數在一起當成變數名稱例如:

location /test {

    set $variable "hchoo";         }

變數必須先建立再使用,否則報錯例如:

server {

  

    {

        echo $ foo;

     }

}

訪問:curl foo" variable

說明: nginxnginx變數的建立和賦值操作發生在全然不同的時間階段。

Nginx變數的建立只能發生在

Nginx配置載入的時候,或者說

Nginx啟動的時候;而賦值操作只會發生在請求實際處理的時候。這意味著不建立而直接使用變數會導致啟動失敗,同時也意味著我們無法在請求處理時動態地建立新的

Nginx變數

變數的可見性:變數的可見性: Nginx 變數一旦創建,其變數名稱的可見範圍就是整個 Nginx配置,甚至可以跨越不同虛擬主機的 server配置區塊。 例如:server {    listen 80;

 /        echo "foo =[$foo]";    }

     location /bar {        set $ oo

    }

}

說明:這裡我們在 location /bar

中用 set

指令創建了變數 $foo

,所以是在整個設定檔中這個變數都是可見的,因此我們可以在這個變數中直接引用這個變數而不用擔心

Nginx會報錯。

訪問這兩個介面的結果:

$ curl 'http://localhost/foo'

foo = []

 

 

$ curl 'http://localhost/foo'

foo = []

從本例子得出另一個變量特性:

Nginx

變量名的可見範圍雖然是整個配置,但每個請求都有所有變數的獨立副本,或者說都有各變數用來存放值的容器的獨立副本,彼此互不干擾。 例如前面我們請求了
/bar介面後,$foo變數被賦予了值 32,但它會被賦予了值 32,但它不會影響對它的螺絲所對應的 $foo值(它仍然是空的!),因為各個請求都有自己獨立的 $foo變數的副本對於 Nginx 變數的副本對於的錯誤之一,就是將 Nginx變數理解成某種在請求之間全域共享的東西,或者說全域變數。而事實上,Nginx變數的生命期是不可能跨越請求邊界的

內建變數

uri請求的URI

(經過解碼,並且不包含請求參數)
$request_uri:
用來獲取請求最原始的URI(請求未經解碼,並且包含一個參數) location /test {
    echo "uri = $uri";    echo "request_uri =$request_uri";    echo "request_uri =$request_uri";

$ curl 'http://localhost:8080/test'

uri = /test

request_uri = /test

/test🜎 ?a=3&b=4'

uri = /test

request_uri = /test?a=3&b=4

/85/test

/test

hello%20world?a=3&b=4'

uri = /test/hello world

request_uri = /test/hello%20world?a=3&b=4request_uri = /test/hello%20world?a=3&b=4request_uri = /test/hello%20world?a=3&b=4

reQ=4

:用來取得目前的請求名稱xxx

URI

參數的值

location /test {    echo "class :$arg_class";

}

請求和回應:

:$a$a$acomd. class:  

$ curl 'http://localhost:8080/test?name=Tom&class=3'

name: Tom

$ curl 'http://localhost:8080/test?name=hello%20world&class=9'

name: hello%20world

class: 9不但可以符合 name
參數,也可以匹配

NAME

參數,抑或是

Name

,等等,

Nginx

名調整為全部小寫的形式:

$ curl 'http://localhost:8080/test?NAME=Marry'

:

$ curl 'http://localhost:8080/test?Name=Jimmy'

name: Jimmy

class:

$cookie_xxx變數群:用來取得cookie
$http_xxx
變數群的值
$args:
回傳目前請求的URL
參數字串(即請求URL 以上就介紹了nginx 變量,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn