当前位置: 代码网 > 移动>阿里 > 解读Nginx变量字段大全

解读Nginx变量字段大全

2025年07月03日 阿里 我要评论
nginx 的变量系统功能强大,能够捕获请求、响应和服务器状态的各种信息。以下是常用的 nginx 变量分类整理:一、请求信息变量变量名描述$host请求中的主机名(如example.com),优先使

nginx 的变量系统功能强大,能够捕获请求、响应和服务器状态的各种信息。

以下是常用的 nginx 变量分类整理:

一、请求信息变量

变量名描述
$host请求中的主机名(如example.com),优先使用请求行的主机名,否则使用 server_name。
$request_methodhttp 请求方法(如get、post)。
$request_uri完整的请求 uri(如/path?query=string)。
$uri解码后的请求 uri,可能在处理过程中被修改(如/path)。
$args请求中的查询字符串(如query=string)。
$query_string同$args。
$request_body请求体内容,需在location中启用proxy_pass或fastcgi_pass。
$content_type请求的 content-type 头(如application/json)。
$content_length请求的 content-length 头。
$request

记录请求的url和http协议

$request_length用于记录客户端请求的总大小(以字节为单位)。这个变量包含了整个 http 请求的所有部分:请求行、请求头和请求体。它在日志分析、流量监控和安全防护等场景中非常有用。

二、客户端信息变量

变量名描述
$remote_addr客户端 ip 地址。
$remote_port客户端端口号。
$http_user_agent客户端 user-agent 头(如浏览器信息)。
$http_referer客户端 referer 头(来源页面)。
$http_cookie客户端 cookie 头。

三、服务器信息变量

变量名描述
$server_addr服务器 ip 地址。
$server_port服务器端口号。
$server_name匹配请求的 server_name。
$scheme请求协议(http或https)。
$server_protocol请求协议版本(如http/1.1)。

四、响应信息变量

变量名描述
$status响应状态码(如200、404)。
$body_bytes_sent发送给客户端的响应体字节数(不包含响应头)。
$bytes_sent用于记录发送给客户端的总字节数,包括响应头和响应体。这个变量在日志记录、流量统计和性能监控中非常有用。
$sent_http_*自定义响应头(如$sent_http_content_type)。

五、时间相关变量

变量名描述
$request_time请求处理时间(单位:秒,精确到毫秒)。
$msec当前时间(单位:秒,精确到毫秒)。
$time_iso8601iso 8601 格式的时间(如2023-01-01t12:00:00+08:00)。
$time_local本地时间(如01/jan/2023:12:00:00 +0800)。

六、连接相关变量

变量名描述
$connection连接序列号。
$connection_requests当前连接上的请求数量。
$keepalive_requests持久连接上的请求数量。
$pipe

用于指示请求的处理方式是通过管道(piped)还是缓冲(buffered)。这个变量主要用于调试和性能分析,特别是在处理大文件或代理请求时。

七、nginx 内置变量

变量名描述
$arg_*获取请求参数(如$arg_name获取?name=value中的value)。
$cookie_*获取 cookie 值(如$cookie_session)。
$http_*获取任意请求头(如$http_accept)。
$sent_http_*设置响应头(如add_header cache-control $sent_http_cache_control)。

八、高级变量

变量名描述
$upstream_addr上游服务器地址(如代理后端的 ip: 端口)。
$upstream_response_time上游服务器响应时间(多个上游时用逗号分隔)。
$uri_filenameuri 中的文件名部分(如/path/file.txt中的file.txt)。
$request_id生成唯一请求 id(用于日志追踪)。
$upstream_connect_timenginx与后游服务器建立连接所消耗的时间,其中包含连接握手的时间,单位为秒。
$upstream_header_time接收到后端服务器响应头花费的时间。
$upstream_queue_time

请求保留在upstream队列中的时间。

队列:如果在处理请求时无法立即选择upstream服务器,则该请求将被放入队列中。如果队列已满,或者在timeout参数指定的时间段内无法选择将请求传递给的服务器,则会将502(错误网关)错误返回给客户端。

$http_x_forwarded_for

用于获取客户端的真实 ip 地址。在经过代理服务器(如负载均衡器、cdn)转发的请求中,客户端的原始 ip 会被记录在 x-forwarded-for 请求头中,而非 $remote_addr(它记录的是直接连接到 nginx 的客户端或代理服务器的 ip)。
$remote_user 用于获取通过 http 基础认证(basic authentication)验证的用户名。它在需要用户身份验证的场景中非常有用,但在使用时需要注意其生效条件和安全问题。
$http_authorization用于获取客户端发送的 authorization 请求头。这个变量在处理身份验证(如 basic auth、bearer token、oauth 等)时非常重要。

九、自定义变量

通过set指令定义:

set $my_var "custom_value";

使用示例

在配置中引用变量:

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 /var/log/nginx/access.log main;

location /proxy {
    proxy_pass http://backend;
    proxy_set_header host $host;
    proxy_set_header x-real-ip $remote_addr;
}

注意事项

  1. 变量生效范围:部分变量(如$request_body)仅在特定模块或指令中可用。
  2. 性能影响:过度使用复杂变量(如正则表达式变量)可能影响性能。
  3. 变量嵌套:某些情况下变量嵌套(如$http_$variable)可能不生效,需用map指令处理。

如需查看完整官方文档,可访问:nginx variables

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com