Nginx內(nèi)置變量應用場景分析
Nginx 的內(nèi)置變量是其配置靈活性的核心,它們提供了豐富的客戶端請求和服務器狀態(tài)信息。下述表格匯總了這些變量,并附帶了實用的分類和說明,方便快速查閱和使用。
1. Nginx 內(nèi)置變量速查表
變量類別 | 變量名 | 說明與示例 |
|---|---|---|
請求URI與參數(shù)? |
| 當前請求的URI(不含參數(shù)),可能經(jīng)過內(nèi)部重寫。例: |
| 客戶端原始的完整請求URI(含參數(shù))。例: | |
| 請求行中的參數(shù)字符串。例: | |
| 獲取指定名稱的參數(shù)值。例: | |
| 如果請求有參數(shù),值為 | |
客戶端信息? |
| 客戶端的直接IP地址 |
| 透傳客戶端原始IP的請求頭,常用于識別經(jīng)過代理的真實用戶IP | |
| 客戶端瀏覽器標識 | |
| 請求來源頁面 | |
請求內(nèi)容? |
| HTTP 請求方法,如 |
| 請求頭中的 | |
| 請求頭中的 | |
| 客戶端的請求主體內(nèi)容 | |
服務器信息? |
| 請求的主機名,優(yōu)先級:請求行 > "Host"請求頭 > 匹配的服務器名 |
| 當前匹配的服務器塊名稱 | |
| 請求到達的服務器端口 | |
| 請求協(xié)議, | |
| 若為SSL安全模式,值為 | |
文件路徑? |
| 當前請求的文檔根目錄或別名 |
| 當前請求映射到的本地文件系統(tǒng)路徑 | |
響應與性能? |
| HTTP 響應狀態(tài)碼 |
| 發(fā)送給客戶端的響應體字節(jié)數(shù)(不含頭) | |
| 處理請求所耗費的時間 | |
其他常用變量? |
| 獲取指定名稱的 Cookie 值 |
| 獲取任意請求頭字段,將 | |
| Nginx 版本號 | |
| 服務器時間的 ISO 8601 格式 |
2. 核心變量詳解與應用場景
了解這些變量的典型用法,能幫助你更好地配置Nginx。
- 精確控制:
$uri 與$request_uri$uri反映的是當前請求經(jīng)過Nginx內(nèi)部處理(如重寫規(guī)則)后的URI,不帶參數(shù)。它常用于內(nèi)部重定向或作為其他指令的輸入。$request_uri則是客戶端發(fā)來的原始請求,包含所有參數(shù),且是只讀的。在構建反向代理請求時,如果你希望原封不動地將客戶端請求傳遞給后端,通常會使用$request_uri。
- 獲取客戶端真實IP:
$remote_addr與$http_x_forwarded_for- 當客戶端與Nginx服務器之間沒有代理時,
$remote_addr就是客戶端的真實IP。 - 當存在反向代理(如CDN、負載均衡器)時,
$remote_addr會是最后一個代理服務器的IP。此時,代理服務器通常會將客戶端的原始IP放在X-Forwarded-For請求頭中,這個值可以通過$http_x_forwarded_for變量獲取 。處理多級代理時,這個變量可能包含一個IP列表。
- 當客戶端與Nginx服務器之間沒有代理時,
- 靈活獲取請求頭:
$http_name- 這是一個通用變量,
name可以替換為任何請求頭字段名的小寫字母和下劃線形式。例如,獲取Accept-Language頭,使用$http_accept_language。這為根據(jù)請求頭信息做差異化處理提供了極大靈活性。
- 這是一個通用變量,
3. 實際應用舉例
下面通過幾個常見場景展示這些變量的用法。
記錄詳細日志
你可以在 log_format中組合使用變量,記錄更豐富的信息。例如,記錄客戶端IP、用戶代理、請求處理時間和響應狀態(tài):
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time';訪問控制與重定向
根據(jù)參數(shù)重寫URL:
if ($arg_version = "v2") {
rewrite ^/api/(.*)$ /v2/api/$1 last;
}基于原始IP進行訪問限制(注意:需確保代理服務器正確設置了 X-Forwarded-For):
# 允許來自192.168.1.100和10.0.0.0/8網(wǎng)段的請求
if ($http_x_forwarded_for !~* "^(192\.168\.1\.100|10\..*)") {
return 403;
}代理配置
在反向代理設置中,常使用變量向后端傳遞原始請求信息:
location /api/ {
proxy_pass http://backend_server;
# 將原始Host頭傳遞給后端
proxy_set_header Host $host;
# 傳遞客戶端真實IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}4. 注意事項
- 變量使用場景:并非所有變量都可以在所有配置指令中使用,具體需參考Nginx官方文檔。
- 條件判斷:在Nginx配置中,尤其是在
if指令中使用變量進行字符串匹配或條件判斷時,需要特別注意Nginx的匹配規(guī)則,有時可能需要使用~*(不區(qū)分大小寫匹配)或~(區(qū)分大小寫匹配)等操作符 。 - 變量性能:大部分內(nèi)置變量開銷很小,但頻繁在復雜邏輯或高并發(fā)場景下使用某些涉及字符串處理的變量仍需注意。
到此這篇關于Nginx內(nèi)置變量應用場景分析的文章就介紹到這了,更多相關nginx內(nèi)置變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
阿里云Nginx配置https實現(xiàn)域名訪問項目(圖文教程)
這篇文章主要介紹了阿里云Nginx配置https實現(xiàn)域名訪問項目(圖文教程),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Nginx + consul + upsync 完成動態(tài)負載均衡的方法詳解
這篇文章主要介紹了Nginx + consul + upsync 完成動態(tài)負載均衡,需要的朋友可以參考下2020-11-11
配置解決Nginx服務器中WordPress路徑不自動加斜杠問題
這篇文章主要介紹了配置解決Nginx服務器中WordPress路徑不自動加斜杠問題,nginx不會自動在請求的最后加上一個斜線的問題文中也有提到通用的規(guī)則改寫方法,需要的朋友可以參考下2016-01-01

