Nginx的预定义变量

变量一览

NGINX 提供了一系列预定义变量,可以在配置文件中使用。这些变量提供了关于请求、连接、服务器等信息的访问。以下是一些常用的预定义变量:

复制代码
$arg_PARAMETER: GET 请求参数中的指定参数值。
$args: 请求中的参数字符串。
$binary_remote_addr: 客户端 IP 地址(二进制格式)。
$body_bytes_sent: 发送给客户端的字节数。
$bytes_sent: 发送给客户端的总字节数。
$connection: 连接序列号。
$connection_requests: 已处理的当前连接的请求数量。
$content_length: 请求头中的 Content-Length 字段。
$content_type: 请求头中的 Content-Type 字段。
$cookie_COOKIE: 请求中的指定 Cookie 值。
$document_root: 当前请求的根目录。
$document_uri: 请求的 URI(不包含参数)。
$host: 请求中的主机头字段。
$hostname: 请求的主机名。
$is_args: 如果请求参数存在,则为 "?",否则为空字符串。
$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: 请求的主体内容。
$request_completion: 请求的完成状态("OK" 或空)。
$request_filename: 当前请求的文件路径。
$request_length: 请求的长度(包括请求行、头部和主体)。
$request_method: 请求的 HTTP 方法(例如:GET、POST)。
$request_time: 请求处理时间(秒)。
$request_uri: 请求的 URI(包括参数)。
$scheme: 请求的协议(http 或 https)。
$sent_http_HEADER: 发送给客户端的响应头字段值。
$server_addr: 服务器 IP 地址。
$server_name: 服务器名称。
$server_port: 服务器端口号。
$server_protocol: 服务器协议(例如:HTTP/1.1)。
$status: 服务器响应的 HTTP 状态码。
$tcpinfo_rtt: 客户端到服务器的往返时延(RTT)。
$tcpinfo_rttvar: RTT 方差。
$tcpinfo_snd_cwnd: 发送方拥塞窗口大小。
$time_iso8601: 当前时间(ISO 8601 格式)。
$time_local: 当前时间(本地时间格式)。
$uri: 请求的 URI(不包含参数)。
$variable: 自定义的变量值。
$http_HEADER: 请求头中的指定字段值。
$http_accept: 客户端发送的 Accept 头部。
$http_accept_encoding: 客户端发送的 Accept-Encoding 头部。
$http_accept_language: 客户端发送的 Accept-Language 头部。
$http_cache_control: 客户端发送的 Cache-Control 头部。
$http_connection: 客户端发送的 Connection 头部。
$http_cookie: 客户端发送的 Cookie 头部。
$http_host: 请求中的主机头字段。
$http_referer: 引导用户代理到当前页面的来源页面。
$http_user_agent: 客户端的用户代理字符串。
$http_upgrade: 客户端发送的 Upgrade 头部。
$http_via: 客户端发送的 Via 头部。
$http_x_forwarded_for: 客户端请求中包含的 X-Forwarded-For 头部信息,表示请求经过的代理服务器 IP 地址。
$http_x_real_ip: 客户端请求中包含的 X-Real-IP 头部信息,表示客户端的真实 IP 地址。

这些预定义变量可以在 NGINX 的配置文件中使用,用于记录访问日志、设置重定向、控制访问权限等。使用这些变量可以让 NGINX 配置更加灵活和强大。

实例

传递客户端的请求信息给后端服务器

在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;:

这一行设置了将要发送到后端服务器的请求头中的 Host 字段。host 表示客户端请求中的主机名,server_port 表示NGINX服务器的端口号。这样设置可以确保后端服务器正确识别请求的目标主机和端口。

proxy_set_header X-Real-IP $remote_addr;:

这一行设置了将要发送到后端服务器的请求头中的 X-Real-IP 字段。$remote_addr 表示客户端的真实IP地址。这样设置有助于后端服务器获取到客户端的真实IP地址,而不是NGINX服务器的IP地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:

这一行设置了将要发送到后端服务器的请求头中的 X-Forwarded-For 字段。$proxy_add_x_forwarded_for 表示NGINX在转发请求时会将客户端的原始IP地址添加到已有的 X-Forwarded-For 字段中。这个字段通常用于跟踪请求经过的代理服务器链路,以便后端服务器可以了解到请求的原始来源。

总的来说,这些配置是为了确保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 是其中一个预定义的日志格式。

相关推荐
侠客行03174 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪5 小时前
深入浅出LangChain4J
java·langchain·llm
子兮曰5 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖5 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神5 小时前
github发布pages的几种状态记录
前端
老毛肚6 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎7 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
不像程序员的程序媛7 小时前
Nginx日志切分
服务器·前端·nginx
Yvonne爱编码7 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚7 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言