簡單介紹nginx 變數使用
所有的 Nginx變數在 Nginx 配置檔案中引用時都須帶上 $ 字首
在 Nginx 配置中,變數只能存放一種型別的值,有且也只存在一種型別,那就是字串型別
使用了標準 ngx_rewrite 模組的 set 配置指令對變數 $a 進行了賦值操作
set $hello "hello world";
這裡使用變數方法,直接寫在雙引號內,perl將檢查引號內的每個字元,看看是否有特殊定義, 然後將它替換為其內容,這叫做變數插值
寫在單引號內會則是原文不會改變
當然有些語法中不加算引號,直接寫內容也是可以的
set $hello "hello world"; print "this is $hello .";
在“變數插值”的上下文中,還有一種特殊情況,即當引用的變數名之後緊跟著變數名的構成字元時(比如後跟字母、數字以及下劃線),我們就需要使用特別的記法(${變數名})來消除歧義
set $hello "hello"; print "this is ${hello}World .";
在nginx中
$ 字元給轉義是不支援的,但我們可以透過不支援“變數插值”的模組配置指令專門構造出取值為
$ 的 Nginx 變數,然後再在 echo 中使用這個變數。
這裡用到了標準模組ngx_geo提供的配置指令geo來為變數
$dollar 賦予字串
$ ,這樣我們在下面需要使用美元符的地方,就直接引用我們的
$dollar 變數就可以了
geo $dollar { default "$"; } server { listen 8080; location /test { echo "This is a dollar sign: $dollar"; } }
變數的建立和賦值操作發生在全然不同的時間階段。Nginx 變數的建立只能發生在 Nginx 配置載入的時候,或者說 Nginx 啟動的時候;而賦值操作則只會發生在請求實際處理的時候。這意味著不建立而直接使用變數會導致啟動失敗,同時也意味著我們無法在請求處理時動態地建立新的 Nginx 變數。
例:
set $hello "hello"; print "this is ${hello}World .";
如set指令中,nginx啟動後是存在變數 $hello的,但是隻有真正執行到該地方時,變數才賦值了
Nginx 變數一旦建立,其變數名的可見範圍就是整個 Nginx 配置,甚至可以跨越不同虛擬主機的 server 配置塊
Nginx變數名的可見範圍雖然是整個配置,但每個請求都有所有變數的獨立副本,或者說都有各變數用來存放值的容器的獨立副本,彼此互不干擾
例:
server { listen 8080; location /foo { echo "foo = [$foo]"; } location /bar { set $foo 32; echo "foo = [$foo]"; } }
結果:
$ curl ' foo = [] $ curl ' foo = [32] $ curl ' foo = []
從這個例子我們可以看到,set 指令因為是在 location /bar 中使用的,所以賦值操作只會在訪問 /bar 的請求中執行。而請求 /foo 介面時,我們總是得到空的 $foo 值,因為使用者變數未賦值就輸出的話,得到的便是空字串。
Nginx變數值容器的生命期是與當前正在處理的請求繫結的,而與location無關。
有一種方式叫內部跳轉,意思是在處理請求的過程中,於伺服器內部,從一個 location 跳轉到另一個 location 的過程,這時候這些location是共用一套Nginx量的容器副本的
例:
server { listen 8080; location /foo { set $a hello; echo_exec /bar; } location /bar { echo "a = [$a]"; } }
結果
$ curl localhost:8080/foo a = [hello] $ curl localhost:8080/bar a = []
這時候如果訪問 localhost:8080/foo,就會跳轉到 /bar,輸出結果 a = [hello],但是如果直接訪問 localhost:8080/bar,輸出結果則為 a = [],因為 $a變數沒有賦值
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2788194/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單介紹nginx反向代理及使用Nginx
- 簡單介紹Linux環境變數檔案Linux變數
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- 簡單介紹Lua中的變數與賦值方法變數賦值
- 簡單介紹使用Nginx限制百度蜘蛛頻繁抓取的問題Nginx
- RPC簡單介紹RPC
- Python簡單介紹Python
- KVM簡單介紹
- RMI簡單介紹
- HTML簡單介紹HTML
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- ajax簡單介紹
- SVG簡單介紹SVG
- Clickjacking簡單介紹
- 【Pandas】簡單介紹
- Map簡單介紹
- JSON簡單介紹JSON
- ActiveMQ簡單介紹MQ
- 簡單介紹Nginx tp3.2.3 404問題解決方案Nginx
- 簡單介紹使用p-limit 限制併發數原始碼解析MIT原始碼
- Git_簡單介紹Git
- jQuery Validate簡單介紹jQuery
- JSON物件簡單介紹JSON物件
- <svg>元素簡單介紹SVG
- 簡單介紹 ldd 命令
- 禪道簡單介紹
- Webpack 的簡單介紹Web
- Apache Curator簡單介紹Apache
- spark簡單介紹(一)Spark
- Flutter key簡單介紹Flutter
- 簡單介紹克隆 JavaScriptJavaScript
- AOP的簡單介紹
- Ansible(1)- 簡單介紹
- Flownet 介紹 及光流的簡單介紹
- form表單的簡單介紹ORM
- 簡單介紹Windows中將Nginx新增為服務的問題WindowsNginx