插件窝 干货文章 nginx的内置变量有哪些

nginx的内置变量有哪些

变量 请求 HTTP 响应 304    来源:    2025-04-21

Nginx 内置变量是预定义的变量,可以在配置文件中(如 serverlocation 等块)直接使用,主要用于日志记录、条件判断、动态代理等场景。以下是常见的 Nginx 内置变量分类及说明:


1. HTTP 请求相关变量

变量名 说明
$host 请求头中的 Host 字段,或服务器名(无 Host 头时)。
$http_host $host,但包含端口号(如 example.com:80)。
$server_name 当前匹配的 server 块的 server_name 值。
$request_method HTTP 请求方法(如 GETPOST)。
$request_uri 完整的原始请求 URI(带参数,如 /path?arg=value)。
$uri / $document_uri 当前请求的 URI(不含参数,如 /path)。
$args / $query_string 请求参数部分(如 arg=value)。
$is_args 如果请求有参数,值为 ?;否则为空。
$remote_addr 客户端 IP 地址。
$remote_port 客户端端口号。
$server_addr 服务器 IP 地址。
$server_port 服务器端口号。
$scheme 请求协议(httphttps)。
$http_user_agent 客户端 User-Agent 信息。
$http_referer 请求来源页面的 Referer 头。
$http_cookie 请求的 Cookie 头。
$content_type 请求的 Content-Type 头。
$content_length 请求的 Content-Length 头。

2. 响应相关变量

变量名 说明
$status HTTP 响应状态码(如 200404)。
$body_bytes_sent 发送给客户端的字节数(不含响应头)。
$bytes_sent 发送给客户端的总字节数(含响应头)。
$sent_http_* 响应头字段,如 $sent_http_content_type$sent_http_cache_control

3. 代理相关变量

变量名 说明
$proxy_host 代理目标服务器的主机名。
$proxy_port 代理目标服务器的端口号。
$proxy_add_x_forwarded_for 追加客户端 IP 到 X-Forwarded-For 头的值(用于多级代理)。

4. 其他实用变量

变量名 说明
$request_time 请求处理时间(秒,含客户端响应时间)。
$upstream_response_time 上游服务器响应时间(反向代理时使用)。
$time_local 本地时间的日志格式(如 02/May/2023:10:12:36 +0800)。
$nginx_version Nginx 版本号。
$pid 当前 Worker 进程的 PID。

5. 动态变量示例

location /example {
    # 记录客户端IP和请求URI
    add_header X-Client-IP $remote_addr;
    add_header X-Request-URI $request_uri;

    # 根据参数动态代理
    if ($args ~ "service=(\w+)") {
        proxy_pass http://$1.example.com;
    }

    # 记录响应时间到日志
    access_log /var/log/nginx/access.log combined;
    log_format combined '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" $request_time';
}

注意事项

  1. 变量作用域:大部分变量在请求处理阶段动态生成,不能用于所有上下文(如 if 条件需谨慎使用)。
  2. 性能影响:频繁使用复杂变量(如正则匹配)可能影响性能。
  3. 自定义变量:可通过 set $var value; 定义自定义变量。

如果需要完整列表,可参考 Nginx 官方文档:http://nginx.org/en/docs/varindex.html