变量一览
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 是其中一个预定义的日志格式。