Nginx的預(yù)定義變量方式
變量一覽
NGINX 提供了一系列預(yù)定義變量,可以在配置文件中使用。這些變量提供了關(guān)于請求、連接、服務(wù)器等信息的訪問。
以下是一些常用的預(yù)定義變量:
$arg_PARAMETER: GET 請求參數(shù)中的指定參數(shù)值。 $args: 請求中的參數(shù)字符串。 $binary_remote_addr: 客戶端 IP 地址(二進(jìn)制格式)。 $body_bytes_sent: 發(fā)送給客戶端的字節(jié)數(shù)。 $bytes_sent: 發(fā)送給客戶端的總字節(jié)數(shù)。 $connection: 連接序列號。 $connection_requests: 已處理的當(dāng)前連接的請求數(shù)量。 $content_length: 請求頭中的 Content-Length 字段。 $content_type: 請求頭中的 Content-Type 字段。 $cookie_COOKIE: 請求中的指定 Cookie 值。 $document_root: 當(dāng)前請求的根目錄。 $document_uri: 請求的 URI(不包含參數(shù))。 $host: 請求中的主機(jī)頭字段。 $hostname: 請求的主機(jī)名。 $is_args: 如果請求參數(shù)存在,則為 "?",否則為空字符串。 $limit_rate: 限制客戶端請求的速率。 $msec: 當(dāng)前時間戳(毫秒級)。 $nginx_version: 當(dāng)前 NGINX 版本號。 $pid: 當(dāng)前 NGINX 進(jìn)程 ID。 $query_string: 請求的查詢字符串。 $realpath_root: 請求根目錄的真實(shí)路徑。 $remote_addr: 客戶端 IP 地址。 $remote_port: 客戶端端口號。 $remote_user: HTTP 認(rèn)證的用戶名。 $request: HTTP 請求行(例如:GET /index.html HTTP/1.1)。 $request_body: 請求的主體內(nèi)容。 $request_completion: 請求的完成狀態(tài)("OK" 或空)。 $request_filename: 當(dāng)前請求的文件路徑。 $request_length: 請求的長度(包括請求行、頭部和主體)。 $request_method: 請求的 HTTP 方法(例如:GET、POST)。 $request_time: 請求處理時間(秒)。 $request_uri: 請求的 URI(包括參數(shù))。 $scheme: 請求的協(xié)議(http 或 https)。 $sent_http_HEADER: 發(fā)送給客戶端的響應(yīng)頭字段值。 $server_addr: 服務(wù)器 IP 地址。 $server_name: 服務(wù)器名稱。 $server_port: 服務(wù)器端口號。 $server_protocol: 服務(wù)器協(xié)議(例如:HTTP/1.1)。 $status: 服務(wù)器響應(yīng)的 HTTP 狀態(tài)碼。 $tcpinfo_rtt: 客戶端到服務(wù)器的往返時延(RTT)。 $tcpinfo_rttvar: RTT 方差。 $tcpinfo_snd_cwnd: 發(fā)送方擁塞窗口大小。 $time_iso8601: 當(dāng)前時間(ISO 8601 格式)。 $time_local: 當(dāng)前時間(本地時間格式)。 $uri: 請求的 URI(不包含參數(shù))。 $variable: 自定義的變量值。 $http_HEADER: 請求頭中的指定字段值。 $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: 請求中的主機(jī)頭字段。 $http_referer: 引導(dǎo)用戶代理到當(dāng)前頁面的來源頁面。 $http_user_agent: 客戶端的用戶代理字符串。 $http_upgrade: 客戶端發(fā)送的 Upgrade 頭部。 $http_via: 客戶端發(fā)送的 Via 頭部。 $http_x_forwarded_for: 客戶端請求中包含的 X-Forwarded-For 頭部信息,表示請求經(jīng)過的代理服務(wù)器 IP 地址。 $http_x_real_ip: 客戶端請求中包含的 X-Real-IP 頭部信息,表示客戶端的真實(shí) IP 地址。
這些預(yù)定義變量可以在 NGINX 的配置文件中使用,用于記錄訪問日志、設(shè)置重定向、控制訪問權(quán)限等。使用這些變量可以讓 NGINX 配置更加靈活和強(qiáng)大。
實(shí)例
server_name
在NGINX中,server_name指令用于指定服務(wù)器塊(server block)所匹配的主機(jī)名(hostname)。
主機(jī)名是瀏覽器在發(fā)送HTTP請求時提供的域名。
server_name指令允許你配置NGINX服務(wù)器以響應(yīng)特定的域名請求。
當(dāng)NGINX收到一個請求時,它會檢查請求的主機(jī)名與配置文件中的server_name指令是否匹配,如果匹配,則會選擇相應(yīng)的服務(wù)器塊來處理請求。
server {
listen 80;
server_name example.com;
# 其他配置...
}
server {
listen 80;
server_name www.example.com;
# 其他配置...
}例如,如果你有兩個域名example.com和www.example.com指向同一個服務(wù)器,但你希望為每個域名提供不同的內(nèi)容或配置,你可以在NGINX配置文件中創(chuàng)建兩個服務(wù)器塊,并分別指定它們的server_name為example.com和www.example.com。
示例配置:
在這個配置中,第一個服務(wù)器塊將響應(yīng)example.com域名的請求,而第二個服務(wù)器塊將響應(yīng)www.example.com域名的請求。
案例:限制域名訪問,但是不限制其對應(yīng)的公網(wǎng)ip訪問
server {
listen 9266;
server_name 10.57.112.210;
# 禁止以 tech.test.xxxxxxx.cn 為前綴的域名訪問
if ($host ~* "^tech\.test\.xxxxxxx\.cn") {
return 403;
}
}傳遞客戶端的請求信息給后端服務(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ù)器的請求頭中的 Host 字段。$host 表示客戶端請求中的主機(jī)名,$server_port 表示NGINX服務(wù)器的端口號。這樣設(shè)置可以確保后端服務(wù)器正確識別請求的目標(biāo)主機(jī)和端口。
proxy_set_header X-Real-IP $remote_addr;:
這一行設(shè)置了將要發(fā)送到后端服務(wù)器的請求頭中的 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ù)器的請求頭中的 X-Forwarded-For 字段。$proxy_add_x_forwarded_for 表示NGINX在轉(zhuǎn)發(fā)請求時會將客戶端的原始IP地址添加到已有的 X-Forwarded-For 字段中。
這個字段通常用于跟蹤請求經(jīng)過的代理服務(wù)器鏈路,以便后端服務(wù)器可以了解到請求的原始來源。
總的來說,這些配置是為了確保NGINX作為代理服務(wù)器時能正確地傳遞客戶端的請求信息給后端服務(wù)器,并且保留了客戶端的真實(shí)IP地址和請求路徑。
將NGINX的訪問日志記錄到指定的文件中
在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"';
# 使用自定義的日志格式記錄訪問日志
access_log /usr/local/nginx/logs/access_9266.log main;- access_log: 這是NGINX配置指令,用于指定訪問日志的位置和格式。
- /usr/local/nginx/logs/access_9266.log: 這是實(shí)際的日志文件路徑和文件名。NGINX 會將訪問日志記錄到這個文件中。
- main: 這是日志格式的名稱。在NGINX的配置文件中,可以定義不同的日志格式,main 是其中一個預(yù)定義的日志格式。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx隱藏server頭信息的實(shí)現(xiàn)
本文主要介紹了Nginx隱藏server頭信息的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Nginx大并發(fā)優(yōu)化實(shí)戰(zhàn)
這篇文章主要介紹了Nginx大并發(fā)優(yōu)化實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法詳解
靜態(tài)資源過大,下載耗時導(dǎo)致頁面打開慢,希望通過壓縮減小文件大小,提升下載速度,所以本文給大家介紹了Nginx實(shí)現(xiàn)靜態(tài)資源壓縮的方法,并通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02

