nginx內置變量詳解

Ngx_http_core_module模塊支持內置變量,他們的名字和apache的內置變量是一致的,人性化吧,瞭解這些變量,將使我們配置起來非常方便,

例如:負載均衡中的header頭轉發 讓後端服務器可以獲取到客戶端請求的真實ip 

首先我們來先看一個最基本的請求header  這是我去請求www.baidu.com 請求header如下:

Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding	gzip, deflate, br
Accept-Language	zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection	keep-alive
Host	www.baidu.com
Referer https://www.baidu.com/s?wd=aaa&rsv_spt=1&rsv_iqid=0x80378a480003084f&issp=1&f=8&rsv_bp=0&rsv_idx=2&
ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1804&rsv_sug4=1805
User-Agent	Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0

爲什麼要貼這個呢?因爲我接下來介紹的nginx內置變量中就有和它們相關的  邊看邊核對 理解起來更容易不是?


常用內置變量列表如下

$args  

此變量與請求行中的參數相等 注意我請求中的 referer  此變量表示我請求的所有參數


$content_length

等於請求行的“Content_Length”的值。


$content_type

等同與請求頭部的”Content_Type”的值


$document_root

等同於當前請求的root指令指定的值


$document_uri

講解這個變量之前需要講解下nginx規範化

所謂規範化,就是先將URI中形如“%XX”的編碼字符進行解碼,再解析URI中的相對路徑“.”和“..”部分, 另外還可能會壓縮相鄰的兩個或多個斜線成爲一個斜線,

這也就是如www.xxx.com///index.html 這樣的訪問也能訪問的原因

規範前的url爲 www.xxx.com///index.html 保存在$request_uri中

而規範後的url爲 www.xxx.com/index.html 保存在$uri中  nginx會壓縮相鄰的兩個或多個斜線成爲一個斜線


$host

與請求頭部中“Host”行指定的值或是request到達的server的名字(沒有Host行)一樣 上述例子中沒有體現


$limit_rate

允許限制的連接速率 一般不常用


$request_method

等同於request的method,通常是“GET”或“POST”


$remote_addr

客戶端ip 這個再做負載均衡的時候 如果要獲取到客戶端的請求ip需要這個


$remote_port

客戶端port


$remote_user

等同於用戶名,由ngx_http_auth_basic_module認證


$request_filename

當前請求的文件的路徑名,由root或alias和URI request組合而成


$request_body_file

請求body內的文件


$request_uri

含有參數的完整的初始URI 如上例子就是

https://www.baidu.com/s?wd=aaa&rsv_spt=1&rsv_iqid=0x80378a480003084f&issp=1&f=8&rsv_bp=0&rsv_idx=2&
ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1804&rsv_sug4=1805

$query_string

與$args一樣 請求中的參數



$sheeme

http模式(http,https)


$server_protocol

等同於request的協議,使用“HTTP/或“HTTP/



$server_addr request

到達的server的ip,一般獲得此變量的值的目的是進行系統調用。爲了避免系統調用,有必要在listen指令中指明ip,並使用bind參數。


$server_name

請求到達的服務器名


$server_port

請求到達的服務器的端口號


$uri

等同於當前request中的URI,可不同於初始值,例如內部重定向時或使用index



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章