Nginx 中的很多参数可以使用内置的变量来设置,本文主要介绍一些常用的变量。

1、Nginx 配置文件中变量使用

http {    ...    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  logs/access.log  main;    ...    server {        listen       8089;        server_name  localhost;        location /abc {            proxy_pass  http://10.39.196.30:8080/abc;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            ...        }    ...

在该配置文件中使用多个变量来定义日期格式(log_format),并使用变量来设置传递给代理服务器的请求头(proxy_set_header)。

2、常用变量说明

变量说明
$arg_name表示请求行中的任意参数,name 为参数名称
$args表示请求行中的参数部分
$binary_remote_addr二进制形式表示的客户端地址
$body_bytes_sent发送到客户端的字节数,不包括响应头
$bytes_received接受到客户端的字节数
$bytes_sent发送到客户端的字节数
$connection连接序列号
$connection_requests当前连接的请求数量
$connection_time连接时间,单位为:ms
$cookie_name表示任意 cookie,name 为 cookie 名称
$date_gmtGMT 时间
$date_local本地时间
$host按照以下顺序获取主机信息:请求行中的主机名,或“Host”请求头字段中的主机名,或与请求匹配的服务器名。
$hostname主机名
$http_name表示任意请求头;name为请求头名称,其中破折号被下划线替换并转换为小写;如:$http_user_agent,$http_x_forwarded_for
$proxy_add_x_forwarded_for将 $remote_addr 的值附加到“X−Forwarded−For”客户端请求头中,由逗号分隔。如果客户端请求头中不存在“X−Forwarded−For”,则 $proxy_add_x_forwarded_for 等于 $remote_addr 。
$proxy_host代理服务器的地址和端口
$proxy_port代理服务器的端口
$query_string同$args
$remote_addr客户端地址
$remote_port客户端端口
$remote_userBasic 身份验证中提供的用户名
$request完整请求行
$request_body请求体
$request_body_file保存请求体的临时文件
$request_length请求长度(包括请求行、头部和请求体)
$request_method请求方法
$request_time请求处理时间,单位为:ms
$request_uri完整请求行
$scheme请求协议,http 或 https
$server_addr接受请求的服务器地址
$server_name接受请求的服务器名称
$server_port接受请求的服务器端口
$server_protocol请求协议,通常为 HTTP/1.0、HTTP/1.1 或 HTTP/2.0
$ssl_cipher建立 SSL 连接所使用的加密套件名称
$ssl_ciphers客户端支持的加密套件列表
$ssl_client_escaped_cert客户端 PEM 格式的证书
$ssl_protocol建立 SSL 连接的协议
$status响应状态码
$time_iso8601ISO 8601 标准格式的本地时间
$time_localCommon Log 格式的本地时间
$upstream_addrupstream 服务器的 ip 和端口
$upstream_bytes_received从 upstream 服务器接收的字节数
$upstream_bytes_sent发送给 upstream 服务器的字节数
$upstream_http_name表示 upstream 服务器任意响应头,name为响应头名称,其中破折号被下划线替换并转换为小写
$upstream_response_lengthupstream 服务器的响应长度,单位为:字节
$upstream_response_timeupstream 服务器的响应时间,单位为:秒
$upstream_statusupstream 服务器的响应状态码
$uri请求 uri

参考:https://nginx.org/en/docs/varindex.html。