nginx自定義變數與內建預定義變數

2021-09-02 00:21:39 字數 2887 閱讀 3170

nginx可以使用變數簡化配置與提高配置的靈活性,所有的變數值都可以通過這種方式引用:

$變數名
而nginx中的變數分為兩種,自定義變數與內建預定義變數

宣告可以在sever,http,location等標籤中使用set命令(非唯一)宣告變數,語法如下

set $變數名 變數值
注意nginx中的變數必須都以$開頭。

可見性nginx的配置檔案中所有使用的變數都必須是宣告過的,否則nginx會無法啟動並列印相關異常日誌

nginx變數的乙個有趣的特性就是nginx中沒乙個變數都是全域性可見的,而他們又不是全域性變數。比如下面這個例子

location a/ 

location b/

由於變數是全域性可見的所以nginx啟動不會報錯,而第乙個location中並不知道$a的具體值因此返回的響應結果為乙個空字串。

在不同層級的標籤中宣告的變數性的可見性規則如下:

location標籤中宣告的變數中對這個location塊可見

server標籤中宣告的變數對server塊以及server塊中的所有子塊可見

http標籤中宣告的變數對http塊以及http塊中的所有子塊可見

內建預定義變數

內建預定義變數即無需宣告就可以使用的變數,通常包括乙個http請求或響應中一部分內容的值,以下為一些常用的內建預定義變數

變數名定義

$arg_parameter

get請求中變數名parameter引數的值。

$args

這個變數等於get請求中的引數。例如,foo=123&bar=blahblah;這個變數只可以被修改

$binary_remote_addr

二進位製碼形式的客戶端位址。

$body_bytes_sent

傳送頁面的位元組數

$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系統呼叫的值

http請求頭中的內容,header為http請求中的內容轉為小寫,-變為_(破折號變為下劃線),例如:$http_user_agent(uaer-agent的值);

http響應頭中的內容,header為http響應中的內容轉為小寫,-變為_(破折號變為下劃線),例如: $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

已經經過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

這個變數等於包含一些客戶端請求引數的原始uri,它無法修改,請檢視$uri更改或重寫uri。

$scheme

所用的協議,比如http或者是https,比如rewrite ^(.+)$ $scheme: redirect;

$server_addr

伺服器位址,在完成一次系統呼叫後可以確定這個值,如果要繞開系統呼叫,則必須在listen中指定位址並且使用bind引數。

$server_name

伺服器名稱。

$server_port

請求到達伺服器的埠號。

$server_protocol

請求使用的協議,通常是http/1.0或http/1.1。

$uri

請求中的當前uri(不帶請求引數,引數位於arg

s),不

同於瀏覽

器傳遞的

args),不同於瀏覽器傳遞的

args),

不同於瀏

覽器傳遞

的request_uri的值,它可以通過內部重定向,或者使用index指令進行修改。不包括協議和主機名,例如/foo/bar.html

nginx內建預定義變數

nginx的配置檔案中可以使用的內建變數以美元符 開始,也有人叫全域性變數。其中,部分預定義的變數的值是可以改變的。arg parameter 這個變數值為 get請求中變數名parameter引數的值。args 這個變數等於get請求中的引數。例如,foo 123 bar blahblah 這個變...

nginx 內建預定義變數列表

arg parameter這個變數值為 get 請求中變數名 parameter 引數的值。args這個變數等於get請求中的引數。例如,foo 123 bar blahblah 這個變數只可以被修改 binary remote addr二進位製碼形式的客戶端位址。body bytes sent傳送...

Nginx 如何自定義變數?

之前的兩篇文章 nginx 變數介紹以及利用 nginx 變數做防盜煉 講的是 nginx 有哪些變數以及乙個常見的應用。那麼如此靈活的 nginx 怎麼能不支援自定義變數呢,今天的文章就來說一下自定義變數的幾個模組以及 nginx 的 keepalive 特性。模組 ngx http map mo...