NGINX变量
变量是配置的核心组成部分,它们可以动态获取请求、响应、服务器状态等信息,并用于条件判断、日志记录、请求转发等场景
常用变量
-
请求相关变量
- $request_method:HTTP 请求方法(如 GET, POST, PUT)
- $request_uri:完整请求 URI(包括查询参数),如 /path?query=1
- $uri:解码后的请求 URI(不包含查询参数),可能被 rewrite 指令修改
- $document_uri:与 $uri 相同
- $args:请求的查询参数(如 query=1&page=2)
- $is_args:如果有查询参数,值为 ?,否则为空字符串
- $remote_addr:客户端 IP 地址
- $remote_port:客户端端口号
- $http_user_agent:客户端 User-Agent 字符串
- $http_cookie:客户端 Cookie 信息
- $http_referer:来源页面的 URL
- $http_x_forwarded_for:客户端真实 IP(通过代理传递,格式可能为 client, proxy1, proxy2)
-
响应相关变量
- $status:HTTP 响应状态码(如 200, 404)
- $body_bytes_sent:发送给客户端的响应体字节数(不包含响应头)
- $sent_http_*:响应头信息,如 $sent_http_content_type、$sent_http_cache_control
-
服务器与连接相关变量
- $server_name:当前匹配的 server_name
- $server_port:服务器接收请求的端口
- $scheme:请求协议(http 或 https)
- $request_time:请求处理时间(秒,精确到毫秒)
- $connection:连接序列号
- $connection_requests:当前连接的请求数量
- $msec:当前时间(精确到毫秒),格式为 1640995200.123
-
SSL/TLS 相关变量
- $ssl_protocol:SSL/TLS 协议版本(如 TLSv1.3)
- $ssl_cipher:使用的 SSL 密码套件
- $ssl_client_cert:客户端证书(PEM 格式)
- $ssl_session_reused:是否复用 SSL 会话(r 表示复用,. 表示未复用)
自定义变量
# set 指令
location / {
set $my_var "hello";
add_header X-My-Var $my_var; # 返回响应头 X-My-Var: hello
}
# map模块
# map string $variable {
# default value;
# pattern1 value1;
# pattern2 value2;
# }
# string:源变量,如 $http_user_agent、$uri 等
# $variable:目标变量,由 map 模块生成
# default:默认值,当没有匹配到任何规则时使用
# pattern:匹配模式,可以是字符串、正则表达式或特殊值
map $http_host $backend {
default backend_prod;
example.com backend1;
api.example.com backend2;
}