国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > Nginx > 正文

淺析Nginx配置文件中的變量的編寫(xiě)使用

2024-08-30 12:22:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Nginx配置文件中的變量的編寫(xiě)使用,包括從常用的rewrite等方面來(lái)深入變量的相關(guān)定義,需要的朋友可以參考下

nginx 的配置文件使用的就是一門(mén)微型的編程語(yǔ)言,許多真實(shí)世界里的 Nginx 配置文件其實(shí)就是一個(gè)一個(gè)的小程序。當(dāng)然,是不是“圖靈完全的”暫且不論,至少據(jù)我觀察,它在設(shè)計(jì)上受 Perl 和 Bourne shell 這兩種語(yǔ)言的影響很大。在這一點(diǎn)上,相比 Apache 和 Lighttpd 等其他 Web 服務(wù)器的配置記法,不能不說(shuō)算是 Nginx 的一大特色了。既然是編程語(yǔ)言,一般也就少不了“變量”這種東西(當(dāng)然,Haskell 這樣奇怪的函數(shù)式語(yǔ)言除外了)。
熟悉 Perl、Bourne shell、C/C++ 等命令式編程語(yǔ)言的朋友肯定知道,變量說(shuō)白了就是存放“值”的容器。而所謂“值”,在許多編程語(yǔ)言里,既可以是 3.14 這樣的數(shù)值,也可以是 hello world 這樣的字符串,甚至可以是像數(shù)組、哈希表這樣的復(fù)雜數(shù)據(jù)結(jié)構(gòu)。然而,在 Nginx 配置中,變量只能存放一種類(lèi)型的值,因?yàn)橐仓淮嬖谝环N類(lèi)型的值,那就是字符串。
比如我們的 nginx.conf 文件中有下面這一行配置:

set $a "hello world"; 

我們使用了標(biāo)準(zhǔn) ngx_rewrite 模塊的 set 配置指令對(duì)變量 $a 進(jìn)行了賦值操作。特別地,我們把字符串 hello world 賦給了它。
我們看到,Nginx 變量名前面有一個(gè) $ 符號(hào),這是記法上的要求。所有的 Nginx 變量在 Nginx 配置文件中引用時(shí)都須帶上 $ 前綴。這種表示方法和 Perl、PHP 這些語(yǔ)言是相似的。
雖然 $ 這樣的變量前綴修飾會(huì)讓正統(tǒng)的 Java 和 C# 程序員不舒服,但這種表示方法的好處也是顯而易見(jiàn)的,那就是可以直接把變量嵌入到字符串常量中以構(gòu)造出新的字符串:

set $a hello;  set $b "$a, $a"; 

這里我們通過(guò)已有的 Nginx 變量 $a 的值,來(lái)構(gòu)造變量 $b 的值,于是這兩條指令順序執(zhí)行完之后,$a 的值是 hello,而 $b 的值則是 hello, hello. 這種技術(shù)在 Perl 世界里被稱為“變量插值”(variable interpolation),它讓專門(mén)的字符串拼接運(yùn)算符變得不再那么必要。我們?cè)谶@里也不妨采用此術(shù)語(yǔ)。
我們來(lái)看一個(gè)比較完整的配置示例:

server {    listen 8080;     location /test {      set $foo hello;      echo "foo: $foo";    }  } 

 
這個(gè)例子省略了 nginx.conf 配置文件中最外圍的 http 配置塊以及 events 配置塊。使用 curl 這個(gè) HTTP 客戶端在命令行上請(qǐng)求這個(gè) /test 接口,我們可以得到

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

這里我們使用第三方 ngx_echo 模塊的 echo 配置指令將 $foo 變量的值作為當(dāng)前請(qǐng)求的響應(yīng)體輸出。
我們看到,echo 配置指令的參數(shù)也支持“變量插值”。不過(guò),需要說(shuō)明的是,并非所有的配置指令都支持“變量插值”。事實(shí)上,指令參數(shù)是否允許“變量插值”,取決于該指令的實(shí)現(xiàn)模塊。
如果我們想通過(guò) echo 指令直接輸出含有“美元符”($)的字符串,那么有沒(méi)有辦法把特殊的 $ 字符給轉(zhuǎn)義掉呢?答案是否定的(至少到目前最新的 Nginx 穩(wěn)定版 1.0.10)。不過(guò)幸運(yùn)的是,我們可以繞過(guò)這個(gè)限制,比如通過(guò)不支持“變量插值”的模塊配置指令專門(mén)構(gòu)造出取值為 $ 的 Nginx 變量,然后再在 echo 中使用這個(gè)變量。看下面這個(gè)例子:

geo $dollar {    default "$";  }   server {    listen 8080;     location /test {      echo "This is a dollar sign: $dollar";    }  } 

測(cè)試結(jié)果如下:

$ curl 'http://localhost:8080/test'  This is a dollar sign: $ 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绍兴市| 宁德市| 新乡市| 霍城县| 临沧市| 乌鲁木齐县| 嘉黎县| 齐齐哈尔市| 宜川县| 兴国县| 临武县| 怀安县| 定安县| 老河口市| 绵竹市| 甘肃省| 贺州市| 镇巴县| 旌德县| 凌源市| 霸州市| 屏山县| 吴江市| 武强县| 南召县| 乌拉特中旗| 准格尔旗| 泰和县| 汤阴县| 邹城市| 伊吾县| 临汾市| 汶上县| 玉环县| 靖安县| 凉城县| 红原县| 临夏市| 石台县| 盐津县| 绥滨县|