解讀Nginx變量字段大全
Nginx 的變量系統(tǒng)功能強大,能夠捕獲請求、響應和服務器狀態(tài)的各種信息。
以下是常用的 Nginx 變量分類整理:
一、請求信息變量
變量名 | 描述 |
---|---|
$host | 請求中的主機名(如example.com),優(yōu)先使用請求行的主機名,否則使用 server_name。 |
$request_method | HTTP 請求方法(如GET、POST)。 |
$request_uri | 完整的請求 URI(如/path?query=string)。 |
$uri | 解碼后的請求 URI,可能在處理過程中被修改(如/path)。 |
$args | 請求中的查詢字符串(如query=string)。 |
$query_string | 同$args。 |
$request_body | 請求體內(nèi)容,需在location中啟用proxy_pass或fastcgi_pass。 |
$content_type | 請求的 Content-Type 頭(如application/json)。 |
$content_length | 請求的 Content-Length 頭。 |
$request | 記錄請求的URL和HTTP協(xié)議 |
$request_length | 用于記錄客戶端請求的總大?。ㄒ宰止?jié)為單位)。這個變量包含了整個 HTTP 請求的所有部分:請求行、請求頭和請求體。它在日志分析、流量監(jiān)控和安全防護等場景中非常有用。 |
二、客戶端信息變量
變量名 | 描述 |
---|---|
$remote_addr | 客戶端 IP 地址。 |
$remote_port | 客戶端端口號。 |
$http_user_agent | 客戶端 User-Agent 頭(如瀏覽器信息)。 |
$http_referer | 客戶端 Referer 頭(來源頁面)。 |
$http_cookie | 客戶端 Cookie 頭。 |
三、服務器信息變量
變量名 | 描述 |
---|---|
$server_addr | 服務器 IP 地址。 |
$server_port | 服務器端口號。 |
$server_name | 匹配請求的 server_name。 |
$scheme | 請求協(xié)議(http或https)。 |
$server_protocol | 請求協(xié)議版本(如HTTP/1.1)。 |
四、響應信息變量
變量名 | 描述 |
---|---|
$status | 響應狀態(tài)碼(如200、404)。 |
$body_bytes_sent | 發(fā)送給客戶端的響應體字節(jié)數(shù)(不包含響應頭)。 |
$bytes_sent | 用于記錄發(fā)送給客戶端的總字節(jié)數(shù),包括響應頭和響應體。這個變量在日志記錄、流量統(tǒng)計和性能監(jiān)控中非常有用。 |
$sent_http_* | 自定義響應頭(如$sent_http_content_type)。 |
五、時間相關變量
變量名 | 描述 |
---|---|
$request_time | 請求處理時間(單位:秒,精確到毫秒)。 |
$msec | 當前時間(單位:秒,精確到毫秒)。 |
$time_iso8601 | ISO 8601 格式的時間(如2023-01-01T12:00:00+08:00)。 |
$time_local | 本地時間(如01/Jan/2023:12:00:00 +0800)。 |
六、連接相關變量
變量名 | 描述 |
---|---|
$connection | 連接序列號。 |
$connection_requests | 當前連接上的請求數(shù)量。 |
$keepalive_requests | 持久連接上的請求數(shù)量。 |
$pipe | 用于指示請求的處理方式是通過管道(piped)還是緩沖(buffered)。這個變量主要用于調(diào)試和性能分析,特別是在處理大文件或代理請求時。 |
七、Nginx 內(nèi)置變量
變量名 | 描述 |
---|---|
$arg_* | 獲取請求參數(shù)(如$arg_name獲取?name=value中的value)。 |
$cookie_* | 獲取 Cookie 值(如$cookie_session)。 |
$http_* | 獲取任意請求頭(如$http_accept)。 |
$sent_http_* | 設置響應頭(如add_header Cache-Control $sent_http_cache_control)。 |
八、高級變量
變量名 | 描述 |
---|---|
$upstream_addr | 上游服務器地址(如代理后端的 IP: 端口)。 |
$upstream_response_time | 上游服務器響應時間(多個上游時用逗號分隔)。 |
$uri_filename | URI 中的文件名部分(如/path/file.txt中的file.txt)。 |
$request_id | 生成唯一請求 ID(用于日志追蹤)。 |
$upstream_connect_time | Nginx與后游服務器建立連接所消耗的時間,其中包含連接握手的時間,單位為秒。 |
$upstream_header_time | 接收到后端服務器響應頭花費的時間。 |
$upstream_queue_time | 請求保留在upstream隊列中的時間。 隊列:如果在處理請求時無法立即選擇upstream服務器,則該請求將被放入隊列中。如果隊列已滿,或者在timeout參數(shù)指定的時間段內(nèi)無法選擇將請求傳遞給的服務器,則會將502(錯誤網(wǎng)關)錯誤返回給客戶端。 |
$http_x_forwarded_for | 用于獲取客戶端的真實 IP 地址。在經(jīng)過代理服務器(如負載均衡器、CDN)轉(zhuǎn)發(fā)的請求中,客戶端的原始 IP 會被記錄在 X-Forwarded-For 請求頭中,而非 $remote_addr(它記錄的是直接連接到 Nginx 的客戶端或代理服務器的 IP)。 |
$remote_user | 用于獲取通過 HTTP 基礎認證(Basic Authentication)驗證的用戶名。它在需要用戶身份驗證的場景中非常有用,但在使用時需要注意其生效條件和安全問題。 |
$http_authorization | 用于獲取客戶端發(fā)送的 Authorization 請求頭。這個變量在處理身份驗證(如 Basic Auth、Bearer Token、OAuth 等)時非常重要。 |
九、自定義變量
通過set
指令定義:
set $my_var "custom_value";
使用示例
在配置中引用變量:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; location /proxy { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
注意事項
- 變量生效范圍:部分變量(如
$request_body
)僅在特定模塊或指令中可用。 - 性能影響:過度使用復雜變量(如正則表達式變量)可能影響性能。
- 變量嵌套:某些情況下變量嵌套(如
$http_$variable
)可能不生效,需用map
指令處理。
如需查看完整官方文檔,可訪問:Nginx Variables
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Nginx日志中request_time和upstream_response_time區(qū)別
Nginx日志中的request_time和upstream_response_time是關鍵的性能指標,本文就來介紹一下Nginx日志中request_time和upstream_response_time區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-11-11nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_por
nginx為了實現(xiàn)反向代理的需求而增加了一個ngx_http_proxy_module模塊,其中proxy_set_header指令就是該模塊需要讀取的配置文件,這篇文章主要介紹了nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port區(qū)別,需要的朋友可以參考下2024-03-03Mac環(huán)境Nginx配置和訪問本地靜態(tài)資源的實現(xiàn)
這篇文章主要介紹了Mac環(huán)境Nginx配置和訪問本地靜態(tài)資源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09利用Nginx反向代理功能解決WEB網(wǎng)站80端口被封的解決方法
大陸的網(wǎng)絡環(huán)境,都在天朝神獸的制度下讓我等小P民悲劇一片;動不動就拔網(wǎng)線、封機房;現(xiàn)在更厲害的一招,從網(wǎng)關封殺你的80端口,一旦被封,網(wǎng)站域名就無法訪問2012-08-08