Nginx 内置变量参考

Nginx 内置变量参考

官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#variables 这些变量可以通过 $var 在配置中使用,在 OpenResty 中可用 ngx.var.<name> 访问。

1 请求头相关

ngx_http_core_module 支持嵌入变量,命名与 Apache Server 的变量一致。首先是代表客户端请求头字段的变量:$http_user_agent、$http_cookie 等。

  • $http_name —— 任意请求头字段:变量名的最后部分为字段名转小写、- 转 _ 后的结果。例如字段 X-Real-IP ⇒ $http_x_real_ip。

2 URL 与参数相关

变量 含义
$arg_name 请求行中的参数(?name=...)
$args 请求行中的参数串
$query_string 同 $args
$request_uri 完整的原始请求 URI(带参数)
$uri 当前请求的 URI(已规范化)
$document_uri 同 $uri
$document_root 当前请求对应的 root 或 alias 指令的值
$realpath_root $document_root 的绝对路径(符号链接已解析)
$is_args 请求行带参数时为 ?,否则为空字符串
$request 完整的原始请求行
$request_method 请求方法,通常为 GET 或 POST
$request_filename 基于 root/alias 与请求 URI 计算出的文件路径
$scheme 请求协议,http 或 https

3 客户端相关

变量 含义
$remote_addr 客户端 IP
$remote_port 客户端端口
$binary_remote_addr 客户端地址的二进制形式(IPv4 固定 4 字节,IPv6 固定 16 字节)
$remote_user Basic 认证提供的用户名
$proxy_protocol_addr PROXY 协议头中的客户端地址(需在 listen 开启 proxy_protocol)
$proxy_protocol_port PROXY 协议头中的客户端端口
$proxy_protocol_server_addr PROXY 协议头中的服务端地址
$proxy_protocol_server_port PROXY 协议头中的服务端端口

4 服务器相关

变量 含义
$server_addr 接受请求的服务器地址(通常需一次系统调用获得)
$server_name 接受请求的服务器名
$server_port 接受请求的服务器端口
$server_protocol 请求协议,通常为 HTTP/1.0、HTTP/1.1 或 HTTP/2.0
$host 依次取:请求行的 host 名 → Host 请求头 → 匹配请求的 server 名
$hostname 主机名
$pid worker 进程 PID
$nginx_version nginx 版本号
$https SSL 模式下为 on,否则为空字符串
$scheme 请求协议,http 或 https

5 请求处理相关信息

变量 含义
$content_length Content-Length 请求头字段
$content_type Content-Type 请求头字段
$cookies($cookie_name) 指定名称的 cookie
$request_body 请求体(在 proxy_pass/fastcgi_pass 等且请求体被读入内存缓冲时可用)
$request_body_file 请求体临时文件名
$request_completion 请求完成时为 OK,否则为空
$request_id 由 16 个随机字节生成的唯一请求标识(十六进制)
$request_length 请求长度(请求行 + 请求头 + 请求体)
$request_time 请求处理时间(秒,毫秒精度),从读到客户端第一个字节起算
$status 响应状态码

6 响应相关

  • $sent_http_name —— 任意的响应头字段;变量名最后一段为字段名转小写、- 转 _。
  • $sent_trailer_name —— 响应末尾发送的任意 trailer 字段(1.13.2+)。
  • $body_bytes_sent —— 发送给客户端的字节数(不含响应头),兼容 Apache 的 %B。
  • $bytes_sent —— 发送给客户端的字节数(含响应头)。

7 时间与限速

  • $msec —— 当前时间,秒(毫秒精度)。
  • $time_iso8601 —— 本地时间 ISO 8601 格式。
  • $time_local —— 本地时间,Common Log Format。
  • $limit_rate —— 设置该变量可启用响应限速(等价于 limit_rate 指令)。

8 TCP 连接信息

  • $connection —— 连接序号。
  • $connection_requests —— 当前连接上已处理的请求数。
  • $pipe —— 请求为 pipelined 时为 p,否则为 .。
  • $tcpinfo_rtt、$tcpinfo_rttvar、$tcpinfo_snd_cwnd、$tcpinfo_rcv_space —— 客户端 TCP 连接信息(系统支持 TCP_INFO 时可用)。

9 在 Lua 中访问

OpenResty 中所有内置变量都可以通过 ngx.var.<name> 或 ngx.var["<name>"] 读取:

ngx.say(ngx.var.remote_addr) ngx.say(ngx.var["cookie_token"]) ngx.say(ngx.var.request_method)
阅读 — · 全站 —
🎸 我的歌单 0 首