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

