Nginx的預(yù)定義變量方式
變量一覽
NGINX 提供了一系列預(yù)定義變量,可以在配置文件中使用。這些變量提供了關(guān)于請(qǐng)求、連接、服務(wù)器等信息的訪問(wèn)。
以下是一些常用的預(yù)定義變量:
$arg_PARAMETER: GET 請(qǐng)求參數(shù)中的指定參數(shù)值。 $args: 請(qǐng)求中的參數(shù)字符串。 $binary_remote_addr: 客戶端 IP 地址(二進(jìn)制格式)。 $body_bytes_sent: 發(fā)送給客戶端的字節(jié)數(shù)。 $bytes_sent: 發(fā)送給客戶端的總字節(jié)數(shù)。 $connection: 連接序列號(hào)。 $connection_requests: 已處理的當(dāng)前連接的請(qǐng)求數(shù)量。 $content_length: 請(qǐng)求頭中的 Content-Length 字段。 $content_type: 請(qǐng)求頭中的 Content-Type 字段。 $cookie_COOKIE: 請(qǐng)求中的指定 Cookie 值。 $document_root: 當(dāng)前請(qǐng)求的根目錄。 $document_uri: 請(qǐng)求的 URI(不包含參數(shù))。 $host: 請(qǐng)求中的主機(jī)頭字段。 $hostname: 請(qǐng)求的主機(jī)名。 $is_args: 如果請(qǐng)求參數(shù)存在,則為 "?",否則為空字符串。 $limit_rate: 限制客戶端請(qǐng)求的速率。 $msec: 當(dāng)前時(shí)間戳(毫秒級(jí))。 $nginx_version: 當(dāng)前 NGINX 版本號(hào)。 $pid: 當(dāng)前 NGINX 進(jìn)程 ID。 $query_string: 請(qǐng)求的查詢字符串。 $realpath_root: 請(qǐng)求根目錄的真實(shí)路徑。 $remote_addr: 客戶端 IP 地址。 $remote_port: 客戶端端口號(hào)。 $remote_user: HTTP 認(rèn)證的用戶名。 $request: HTTP 請(qǐng)求行(例如:GET /index.html HTTP/1.1)。 $request_body: 請(qǐng)求的主體內(nèi)容。 $request_completion: 請(qǐng)求的完成狀態(tài)("OK" 或空)。 $request_filename: 當(dāng)前請(qǐng)求的文件路徑。 $request_length: 請(qǐng)求的長(zhǎng)度(包括請(qǐng)求行、頭部和主體)。 $request_method: 請(qǐng)求的 HTTP 方法(例如:GET、POST)。 $request_time: 請(qǐng)求處理時(shí)間(秒)。 $request_uri: 請(qǐng)求的 URI(包括參數(shù))。 $scheme: 請(qǐng)求的協(xié)議(http 或 https)。 $sent_http_HEADER: 發(fā)送給客戶端的響應(yīng)頭字段值。 $server_addr: 服務(wù)器 IP 地址。 $server_name: 服務(wù)器名稱(chēng)。 $server_port: 服務(wù)器端口號(hào)。 $server_protocol: 服務(wù)器協(xié)議(例如:HTTP/1.1)。 $status: 服務(wù)器響應(yīng)的 HTTP 狀態(tài)碼。 $tcpinfo_rtt: 客戶端到服務(wù)器的往返時(shí)延(RTT)。 $tcpinfo_rttvar: RTT 方差。 $tcpinfo_snd_cwnd: 發(fā)送方擁塞窗口大小。 $time_iso8601: 當(dāng)前時(shí)間(ISO 8601 格式)。 $time_local: 當(dāng)前時(shí)間(本地時(shí)間格式)。 $uri: 請(qǐng)求的 URI(不包含參數(shù))。 $variable: 自定義的變量值。 $http_HEADER: 請(qǐng)求頭中的指定字段值。 $http_accept: 客戶端發(fā)送的 Accept 頭部。 $http_accept_encoding: 客戶端發(fā)送的 Accept-Encoding 頭部。 $http_accept_language: 客戶端發(fā)送的 Accept-Language 頭部。 $http_cache_control: 客戶端發(fā)送的 Cache-Control 頭部。 $http_connection: 客戶端發(fā)送的 Connection 頭部。 $http_cookie: 客戶端發(fā)送的 Cookie 頭部。 $http_host: 請(qǐng)求中的主機(jī)頭字段。 $http_referer: 引導(dǎo)用戶代理到當(dāng)前頁(yè)面的來(lái)源頁(yè)面。 $http_user_agent: 客戶端的用戶代理字符串。 $http_upgrade: 客戶端發(fā)送的 Upgrade 頭部。 $http_via: 客戶端發(fā)送的 Via 頭部。 $http_x_forwarded_for: 客戶端請(qǐng)求中包含的 X-Forwarded-For 頭部信息,表示請(qǐng)求經(jīng)過(guò)的代理服務(wù)器 IP 地址。 $http_x_real_ip: 客戶端請(qǐng)求中包含的 X-Real-IP 頭部信息,表示客戶端的真實(shí) IP 地址。
這些預(yù)定義變量可以在 NGINX 的配置文件中使用,用于記錄訪問(wèn)日志、設(shè)置重定向、控制訪問(wèn)權(quán)限等。使用這些變量可以讓 NGINX 配置更加靈活和強(qiáng)大。
實(shí)例
server_name
在NGINX中,server_name指令用于指定服務(wù)器塊(server block)所匹配的主機(jī)名(hostname)。
主機(jī)名是瀏覽器在發(fā)送HTTP請(qǐng)求時(shí)提供的域名。
server_name指令允許你配置NGINX服務(wù)器以響應(yīng)特定的域名請(qǐng)求。
當(dāng)NGINX收到一個(gè)請(qǐng)求時(shí),它會(huì)檢查請(qǐng)求的主機(jī)名與配置文件中的server_name指令是否匹配,如果匹配,則會(huì)選擇相應(yīng)的服務(wù)器塊來(lái)處理請(qǐng)求。
server {
listen 80;
server_name example.com;
# 其他配置...
}
server {
listen 80;
server_name www.example.com;
# 其他配置...
}例如,如果你有兩個(gè)域名example.com和www.example.com指向同一個(gè)服務(wù)器,但你希望為每個(gè)域名提供不同的內(nèi)容或配置,你可以在NGINX配置文件中創(chuàng)建兩個(gè)服務(wù)器塊,并分別指定它們的server_name為example.com和www.example.com。
示例配置:
在這個(gè)配置中,第一個(gè)服務(wù)器塊將響應(yīng)example.com域名的請(qǐng)求,而第二個(gè)服務(wù)器塊將響應(yīng)www.example.com域名的請(qǐng)求。
案例:限制域名訪問(wèn),但是不限制其對(duì)應(yīng)的公網(wǎng)ip訪問(wèn)
server {
listen 9266;
server_name 10.57.112.210;
# 禁止以 tech.test.xxxxxxx.cn 為前綴的域名訪問(wèn)
if ($host ~* "^tech\.test\.xxxxxxx\.cn") {
return 403;
}
}傳遞客戶端的請(qǐng)求信息給后端服務(wù)器
在server或者location下配置
proxy_set_header Host $hos:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;:
這一行設(shè)置了將要發(fā)送到后端服務(wù)器的請(qǐng)求頭中的 Host 字段。$host 表示客戶端請(qǐng)求中的主機(jī)名,$server_port 表示NGINX服務(wù)器的端口號(hào)。這樣設(shè)置可以確保后端服務(wù)器正確識(shí)別請(qǐng)求的目標(biāo)主機(jī)和端口。
proxy_set_header X-Real-IP $remote_addr;:
這一行設(shè)置了將要發(fā)送到后端服務(wù)器的請(qǐng)求頭中的 X-Real-IP 字段。$remote_addr 表示客戶端的真實(shí)IP地址。這樣設(shè)置有助于后端服務(wù)器獲取到客戶端的真實(shí)IP地址,而不是NGINX服務(wù)器的IP地址。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:
這一行設(shè)置了將要發(fā)送到后端服務(wù)器的請(qǐng)求頭中的 X-Forwarded-For 字段。$proxy_add_x_forwarded_for 表示NGINX在轉(zhuǎn)發(fā)請(qǐng)求時(shí)會(huì)將客戶端的原始IP地址添加到已有的 X-Forwarded-For 字段中。
這個(gè)字段通常用于跟蹤請(qǐng)求經(jīng)過(guò)的代理服務(wù)器鏈路,以便后端服務(wù)器可以了解到請(qǐng)求的原始來(lái)源。
總的來(lái)說(shuō),這些配置是為了確保NGINX作為代理服務(wù)器時(shí)能正確地傳遞客戶端的請(qǐng)求信息給后端服務(wù)器,并且保留了客戶端的真實(shí)IP地址和請(qǐng)求路徑。
將NGINX的訪問(wèn)日志記錄到指定的文件中
在http,server或location下配置access_log,在配置access_log前先在http下配置log_format,
# 定義自定義的日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 使用自定義的日志格式記錄訪問(wèn)日志
access_log /usr/local/nginx/logs/access_9266.log main;- access_log: 這是NGINX配置指令,用于指定訪問(wèn)日志的位置和格式。
- /usr/local/nginx/logs/access_9266.log: 這是實(shí)際的日志文件路徑和文件名。NGINX 會(huì)將訪問(wèn)日志記錄到這個(gè)文件中。
- main: 這是日志格式的名稱(chēng)。在NGINX的配置文件中,可以定義不同的日志格式,main 是其中一個(gè)預(yù)定義的日志格式。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx 代理80端口轉(zhuǎn)443端口的實(shí)現(xiàn)
這篇文章主要介紹了nginx 代理80端口轉(zhuǎn)443端口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
升級(jí)nginx支持HTTP/2服務(wù)端推送的方法
這篇文章主要介紹了升級(jí)nginx支持HTTP/2服務(wù)端推送的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
windows系統(tǒng)下安裝Nginx及簡(jiǎn)單使用過(guò)程
Nginx是一個(gè)很強(qiáng)大的高性能Web和反向代理服務(wù),也是一種輕量級(jí)的Web服務(wù)器,可以作為獨(dú)立的服務(wù)器部署網(wǎng)站,應(yīng)用非常廣泛,特別是現(xiàn)在前后端分離的情況下,這篇文章主要介紹了windows系統(tǒng)下安裝Nginx以及簡(jiǎn)單使用,需要的朋友可以參考下2024-04-04
Nginx?HttpHeader增加幾個(gè)關(guān)鍵的安全選項(xiàng)問(wèn)題小結(jié)
本文給大家介紹Nginx?HttpHeader增加幾個(gè)關(guān)鍵的安全選項(xiàng)問(wèn)題小結(jié),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-12-12
詳解通過(guò)Nginx部署Django(基于ubuntu)
這篇文章主要介紹了詳解通過(guò)Nginx部署Django(基于ubuntu),Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見(jiàn)的一種方式,有興趣的可以了解一下。2017-01-01
Nginx服務(wù)器中HTTP 301跳轉(zhuǎn)到帶www的域名的方法
這篇文章主要介紹了Nginx服務(wù)器中HTTP 301跳轉(zhuǎn)到帶www的域名的方法,包括從HTTPS 301提示跳轉(zhuǎn)等rewrite相關(guān)的方法,需要的朋友可以參考下2015-07-07

