nginx變量

1风瘦、變量的分類(lèi)及使用

  • 所有的 Nginx變量在 Nginx 配置文件中引用時(shí)都須帶上 $ 前綴
  • 在 Nginx 配置中送丰,變量只能存放一種類(lèi)型的值,有且也只存在一種類(lèi)型弛秋,那就是字符串類(lèi)型
  • nginx可以使用變量簡(jiǎn)化配置與提高配置的靈活性器躏,所有的變量值都可以通過(guò)這種方式引用
    nginx中的變量分為兩種,自定義變量與內(nèi)置預(yù)定義變量

(1)自定義變量

可以在sever,http,location等標(biāo)簽中使用set命令(非唯一)聲明變量蟹略,語(yǔ)法如下

set $變量名 變量值

注意:

  • nginx 中的變量必須都以$開(kāi)頭
  • nginx 的配置文件中所有使用的變量都必須是聲明過(guò)的登失,否則 nginx 會(huì)無(wú)法啟動(dòng)并打印相關(guān)異常日志
變量的可見(jiàn)性

在不同層級(jí)的標(biāo)簽中聲明的變量性的可見(jiàn)性規(guī)則如下:

  • location標(biāo)簽中聲明的變量中對(duì)這個(gè)location塊可見(jiàn)
  • server標(biāo)簽中聲明的變量對(duì)server塊以及server塊中的所有子塊可見(jiàn)
  • http標(biāo)簽中聲明的變量對(duì)http塊以及http塊中的所有子塊可見(jiàn)
nginx安裝echo模塊
查看已經(jīng)安裝的nginx的版本
[root@192 ~]# nginx -V 
下載echo模塊的安裝包
[root@192 ~]# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
[root@192 ~]# ls
anaconda-ks.cfg  nginx-1.16.0.tar.gz  v0.61.tar.gz
解壓到相同路徑下:
[root@192 ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
[root@192 ~]# tar xzf v0.61.tar.gz -C /usr/local/
安裝編譯工具
[root@192 ~]# cd /usr/local/
[root@192 local]# yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++   zlib zlib-devel
添加模塊:
[root@192 local]# cd nginx-1.16.0/
添加上原來(lái)已經(jīng)有的參數(shù)和新添加的模塊:
[root@192 nginx-1.16.0]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/usr/local/echo-nginx-module-0.61
[root@192 nginx-1.16.0]# make   #編譯,不要make install 否則會(huì)覆蓋原來(lái)的文件
[root@192 nginx-1.16.0]#  mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak2 #將原來(lái)的nignx備份
[root@192 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/  拷貝nignx
[root@192 nginx-1.16.0]# /usr/local/nginx/sbin/nginx  #啟動(dòng)
[root@192 nginx-1.16.0]# nginx -V  查看模塊是否添加成功
示例1
[root@192 ~]# cd /etc/nginx/conf.d/
[root@192 conf.d]# vim echo.conf
server {
        listen 80;
        server_name     localhost;
        location /test {
                set $foo hello;
                echo "foo: $foo";
        }
}
[root@192 conf.d]# nginx -s reload
[root@192 conf.d]# curl localhost/test
foo: hello
示例2

使用大括號(hào)插值
在“變量插值”的上下文中挖炬,還有一種特殊情況揽浙,即當(dāng)引用的變量名之后緊跟著變量名的構(gòu)成字符時(shí)(比如后跟字母、數(shù)字以及下劃線)意敛,我們就需要使用特別的記法來(lái)消除歧義

server {
        listen 80;
        server_name     localhost;
        location /test-brace {
                set $first "hello ";
                echo "${first}world";
        }
}
[root@192 conf.d]# nginx -s reload 
[root@192 conf.d]# curl localhost/test-brace
hello world
變量作用域

Nginx 變量的創(chuàng)建和賦值操作發(fā)生在全然不同的時(shí)間階段馅巷,Nginx 變量的創(chuàng)建只能發(fā)生在 Nginx 配置加載的時(shí)候,或者說(shuō) Nginx 啟動(dòng)的時(shí)候草姻,而賦值操作則只會(huì)發(fā)生在請(qǐng)求實(shí)際處理的時(shí)候钓猬。
這意味著不創(chuàng)建而直接使用變量會(huì)導(dǎo)致啟動(dòng)失敗,同時(shí)也意味著我們無(wú)法在請(qǐng)求處理時(shí)動(dòng)態(tài)地創(chuàng)建新的 Nginx 變量撩独。
Nginx 變量一旦創(chuàng)建敞曹,其變量名的可見(jiàn)范圍就是整個(gè) Nginx 配置,甚至可以跨越不同虛擬主機(jī)的 server 配置塊综膀。

server {
        listen 80;
        server_name     localhost;
        location /foo {
                echo "foo = [$foo]";
        }
        location /bar {
                set $foo 32;
                echo "foo = [$foo]";
        }
}
[root@192 conf.d]# curl 'http://localhost/foo'
foo = []
[root@192 conf.d]# curl 'http://localhost/bar'
foo = [32]

(2)內(nèi)置預(yù)定義

*變量名*                                         *定義*
$arg_PARAMETERGET            請(qǐng)求中變量名PARAMETER參數(shù)的值澳迫。
$args                        這個(gè)變量等于GET請(qǐng)求中的參數(shù)。例如剧劝,              
                             foo=123&bar=blahblah;這個(gè)變量只可以被修改
$binary_remote_addr          二進(jìn)制碼形式的客戶(hù)端地址橄登。
$body_bytes_sent             傳送頁(yè)面的字節(jié)數(shù)
$content_length              請(qǐng)求頭中的Content-length字段。
$content_type                請(qǐng)求頭中的Content-Type字段。
$cookie_COOKIE               cookie COOKIE的值拢锹。
$document_root               當(dāng)前請(qǐng)求在root指令中指定的值谣妻。
$document_uri                與$uri相同。
$host                        請(qǐng)求中的主機(jī)頭(Host)字段面褐,如果請(qǐng)求中的主機(jī)頭
                             不可用或者空,則為處理請(qǐng)求的server名稱(chēng)(處理請(qǐng)
                             求的server的server_name指令的值)取胎。值為小寫(xiě)展哭, 
                             不包含端口。
$hostname                    機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值
$http_HEADER                 HTTP請(qǐng)求頭中的內(nèi)容闻蛀,HEADER為HTTP請(qǐng)求中的
                             內(nèi)容轉(zhuǎn)為小寫(xiě)匪傍,-變?yōu)開(kāi)(破折號(hào)變?yōu)橄聞澗€),例如: 
                             $http_user_agent(Uaer-Agent的值); 
$sent_http_HEADER            HTTP響應(yīng)頭中的內(nèi)容觉痛,HEADER為HTTP響應(yīng)中的
                             內(nèi)容轉(zhuǎn)為小寫(xiě)役衡,-變?yōu)開(kāi)(破折號(hào)變?yōu)橄聞澗€),例如: 
                             $sent_http_cache_control, 
                             $sent_http_content_type…;
$is_args                     如果$args設(shè)置薪棒,值為"?"手蝎,否則為""。
$limit_rate                  這個(gè)變量可以限制連接速率俐芯。
$nginx_version               當(dāng)前運(yùn)行的nginx版本號(hào)棵介。
$query_string                與$args相同。
$remote_addr                 客戶(hù)端的IP地址吧史。
$remote_port                 客戶(hù)端的端口邮辽。
$remote_user                 已經(jīng)經(jīng)過(guò)Auth Basic Module驗(yàn)證的用戶(hù)名。
$request_filename            當(dāng)前連接請(qǐng)求的文件路徑贸营,由root或alias指令與 
                             URI請(qǐng)求生成吨述。
$request_body                這個(gè)變量(0.7.58+)包含請(qǐng)求的主要信息。在使
                             用proxy_pass或fastcgi_pass指令的location中比較
                             有意義钞脂。
$request_body_file           客戶(hù)端請(qǐng)求主體信息的臨時(shí)文件名揣云。
$request_completion          如果請(qǐng)求成功,設(shè)為"OK"冰啃;如果請(qǐng)求未完成或者不
                             是一系列請(qǐng)求中最后一部分則設(shè)為空灵再。
$request_method              這個(gè)變量是客戶(hù)端請(qǐng)求的動(dòng)作,通常為GET或
                             POST亿笤。包括0.8.20及之前的版本中翎迁,這個(gè)變量總
                             為main request中的動(dòng)作,如果當(dāng)前請(qǐng)求是一個(gè)子
                             請(qǐng)求净薛,并不使用這個(gè)當(dāng)前請(qǐng)求的動(dòng)作汪榔。
$request_uri                 這個(gè)變量等于包含一些客戶(hù)端請(qǐng)求參數(shù)的原始
                             URI,它無(wú)法修改,請(qǐng)查看$uri更改或重寫(xiě)URI痴腌。
$scheme                      所用的協(xié)議雌团,比如http或者是https,比如rewrite 
                             ^(.+)$ $scheme://example.com$1 redirect;
$server_addr                 服務(wù)器地址士聪,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè) 
                             值锦援,如果要繞開(kāi)系統(tǒng)調(diào)用,則必須在listen中指定地
                             址并且使用bind參數(shù)剥悟。
$server_name                 服務(wù)器名稱(chēng)灵寺。
$server_port                 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)。
$server_protocol             請(qǐng)求使用的協(xié)議区岗,通常是HTTP/1.0或HTTP/1.1略板。
$uri                         請(qǐng)求中的當(dāng)前URI(不帶請(qǐng)求參數(shù),參數(shù)位于args慈缔,不
                             同于瀏覽器傳遞的args)叮称,不同于瀏覽器傳遞的
                             request_uri的值,它可以通過(guò)內(nèi)部重定向藐鹤,或者使用 
                             index指令進(jìn)行修改瓤檐。不包括協(xié)議和主機(jī)名,例
                             如/foo/bar.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娱节,一起剝皮案震驚了整個(gè)濱河市距帅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌括堤,老刑警劉巖碌秸,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悄窃,居然都是意外死亡讥电,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)轧抗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恩敌,“玉大人,你說(shuō)我怎么就攤上這事横媚【琅冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵灯蝴,是天一觀的道長(zhǎng)恢口。 經(jīng)常有香客問(wèn)我,道長(zhǎng)穷躁,這世上最難降的妖魔是什么耕肩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上猿诸,老公的妹妹穿的比我還像新娘婚被。我一直安慰自己,他們只是感情好梳虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布址芯。 她就那樣靜靜地躺著,像睡著了一般窜觉。 火紅的嫁衣襯著肌膚如雪谷炸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天竖螃,我揣著相機(jī)與錄音淑廊,去河邊找鬼逗余。 笑死特咆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的录粱。 我是一名探鬼主播腻格,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啥繁!你這毒婦竟也來(lái)了菜职?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤旗闽,失蹤者是張志新(化名)和其女友劉穎酬核,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體适室,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫡意,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捣辆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬螟。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汽畴,靈堂內(nèi)的尸體忽然破棺而出旧巾,到底是詐尸還是另有隱情,我是刑警寧澤忍些,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布鲁猩,位于F島的核電站,受9級(jí)特大地震影響罢坝,放射性物質(zhì)發(fā)生泄漏绳匀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疾棵。 院中可真熱鬧戈钢,春花似錦、人聲如沸是尔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拟枚。三九已至薪铜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恩溅,已是汗流浹背隔箍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脚乡,地道東北人蜒滩。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奶稠,于是被迫代替她去往敵國(guó)和親俯艰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Nginx 的配置文件使用的就是一門(mén)微型的編程語(yǔ)言锌订,許多真實(shí)世界里的 Nginx 配置文件其實(shí)就是一個(gè)一個(gè)的小程序...
    SkTj閱讀 4,174評(píng)論 0 7
  • Nginx 同 Apache 等其他 Web 服務(wù)器的配置記法不太相同竹握,Nginx的配置文件使用語(yǔ)法的就是一門(mén)微型...
    陳超同學(xué)閱讀 650評(píng)論 0 0
  • 標(biāo)簽(空格分隔): nginx 在 Nginx 配置中,變量只能存放一種類(lèi)型的值辆飘,那就是字符串啦辐。 1 自定義變量 ...
    ahcj_11閱讀 46,660評(píng)論 0 11
  • 大多數(shù) Nginx 新手都會(huì)頻繁遇到這樣一個(gè)困惑,那就是當(dāng)同一個(gè)location配置塊使用了多個(gè) Nginx 模塊...
    SkTj閱讀 7,584評(píng)論 0 12
  • 在nginx配置中蜈项,變量只能存放一種類(lèi)型的值芹关,那就是字符串。比如在nginx.conf文件有: 使用標(biāo)準(zhǔn)ngx_r...
    王一百閱讀 979評(píng)論 0 0