nginx自定義變量與內(nèi)置預定義變量的使用
總覽
nginx可以使用變量簡化配置與提高配置的靈活性,所有的變量值都可以通過這種方式引用:
$變量名
而nginx中的變量分為兩種,自定義變量與內(nèi)置預定義變量
內(nèi)置變量
聲明
可以在sever,http,location等標簽中使用set命令(非唯一)聲明變量,語法如下
set $變量名 變量值
注意nginx中的變量必須都以$開頭。
可見性
nginx的配置文件中所有使用的變量都必須是聲明過的,否則nginx會無法啟動并打印相關異常日志
nginx變量的一個有趣的特性就是nginx中沒一個變量都是全局可見的,而他們又不是全局變量。比如下面這個例子
location a/ { return 200 $a } location b/ { set $a hello nginx return 200 $a }
由于變量是全局可見的所以nginx啟動不會報錯,而第一個location中并不知道$a的具體值因此返回的響應結果為一個空字符串。
在不同層級的標簽中聲明的變量性的可見性規(guī)則如下:
- location標簽中聲明的變量中對這個location塊可見
- server標簽中聲明的變量對server塊以及server塊中的所有子塊可見
- http標簽中聲明的變量對http塊以及http塊中的所有子塊可見
內(nèi)置預定義變量
內(nèi)置預定義變量即無需聲明就可以使用的變量,通常包括一個http請求或響應中一部分內(nèi)容的值,以下為一些常用的內(nèi)置預定義變量
變量名 | 定義 |
---|---|
$arg_PARAMETER | GET請求中變量名PARAMETER參數(shù)的值。 |
$args | 這個變量等于GET請求中的參數(shù)。例如,foo=123&bar=blahblah;這個變量只可以被修改 |
$binary_remote_addr | 二進制碼形式的客戶端地址。 |
$body_bytes_sent | 傳送頁面的字節(jié)數(shù) |
$content_length | 請求頭中的Content-length字段。 |
$content_type | 請求頭中的Content-Type字段。 |
$cookie_COOKIE | cookie COOKIE的值。 |
$document_root | 當前請求在root指令中指定的值。 |
$document_uri | 與$uri相同。 |
$host | 請求中的主機頭(Host)字段,如果請求中的主機頭不可用或者空,則為處理請求的server名稱(處理請求的server的server_name指令的值)。值為小寫,不包含端口。 |
$hostname | 機器名使用 gethostname系統(tǒng)調用的值 |
$http_HEADER | HTTP請求頭中的內(nèi)容,HEADER為HTTP請求中的內(nèi)容轉為小寫,-變?yōu)開(破折號變?yōu)橄聞澗€),例如:$http_user_agent(Uaer-Agent的值); |
$sent_http_HEADER | HTTP響應頭中的內(nèi)容,HEADER為HTTP響應中的內(nèi)容轉為小寫,-變?yōu)開(破折號變?yōu)橄聞澗€),例如: $sent_http_cache_control, $sent_http_content_type…; |
$is_args | 如果$args設置,值為"?",否則為""。 |
$limit_rate | 這個變量可以限制連接速率。 |
$nginx_version | 當前運行的nginx版本號。 |
$query_string | 與$args相同。 |
$remote_addr | 客戶端的IP地址。 |
$remote_port | 客戶端的端口。 |
$remote_user | 已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名。 |
$request_filename | 當前連接請求的文件路徑,由root或alias指令與URI請求生成。 |
$request_body | 這個變量(0.7.58+)包含請求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比較有意義。 |
$request_body_file | 客戶端請求主體信息的臨時文件名。 |
$request_completion | 如果請求成功,設為"OK";如果請求未完成或者不是一系列請求中最后一部分則設為空。 |
$request_method | 這個變量是客戶端請求的動作,通常為GET或POST。包括0.8.20及之前的版本中,這個變量總為main request中的動作,如果當前請求是一個子請求,并不使用這個當前請求的動作。 |
$request_uri | 這個變量等于包含一些客戶端請求參數(shù)的原始URI,它無法修改,請查看$uri更改或重寫URI。 |
$scheme | 所用的協(xié)議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect; |
$server_addr | 服務器地址,在完成一次系統(tǒng)調用后可以確定這個值,如果要繞開系統(tǒng)調用,則必須在listen中指定地址并且使用bind參數(shù)。 |
$server_name | 服務器名稱。 |
$server_port | 請求到達服務器的端口號。 |
$server_protocol | 請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。 |
$uri | 請求中的當前URI(不帶請求參數(shù),參數(shù)位于 |
到此這篇關于nginx自定義變量與內(nèi)置預定義變量的使用的文章就介紹到這了,更多相關nginx自定義變量與內(nèi)置預定義變量內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。