$bytes_sent 可准确记录反向代理实际响应流量,但需满足上游完整返回、禁用 proxy_ignore_client_abort、合理配置 buffering 和 gzip;日志中结合 $upstream_addr 等字段可实现按服务维度统计与监控。

直接用 $bytes_sent 记录并分析反向代理响应的实际流量是可行的,但必须确保它反映的是真实发出的字节数——它统计的是 Nginx 最终发送给客户端的响应体大小(不含响应头),在反代场景下,这个值取决于上游响应是否完整返回、Nginx 是否截断或压缩、连接是否中途断开。
确认 $bytes_sent 在反代中准确生效的关键条件
该变量不是“请求一来就写入”,而是在响应真正结束、数据发完后才被赋值。反代环境下尤其要注意:
- 上游服务必须正常返回完整响应;若 upstream timeout、502/504 或主动关闭连接,
$bytes_sent可能为 0 或远小于预期 - 禁用
proxy_buffering off时,Nginx 不缓存响应,$bytes_sent更贴近实时发送量;开启缓冲后,仍以最终发出为准,但延迟更高 - 启用
gzip on时,$bytes_sent是压缩后的字节数,更符合真实带宽消耗,无需额外换算 - 避免配置
proxy_ignore_client_abort off(默认为 on),否则客户端提前断连会导致统计偏小
在 access_log 中可靠记录反代流量
定义专用日志格式,显式包含 $bytes_sent 和反代关键上下文:
log_format proxy_flow '$host $remote_addr [$time_local] '
'"$request" $status $bytes_sent '
'$upstream_addr $upstream_status $upstream_response_time '
'"$http_user_agent"';
在对应 location 块中启用:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
location /api/ {
proxy_pass https://backend;
access_log /var/log/nginx/proxy_api.log proxy_flow;
}
这样每条日志都带上游地址、状态、耗时和实际发送字节数,便于后续按目标服务聚合。
按上游服务维度快速统计流量
利用 awk 按 $upstream_addr 分组汇总当日流量(单位 MB):
awk '$7 ~ /:443/ {sum += $5} END {printf "Total sent: %.2f MB\n", sum/1024/1024}' /var/log/nginx/proxy_api.log
若需区分不同后端域名,可配合 $upstream_http_x_backend_name(需上游透传)或用 map 提前映射 $upstream_addr 到服务名,再做分组统计。
接入实时监控体系提升可观测性
单靠日志文件难以支撑秒级告警,推荐组合方案:
- 用
nginxlog-exporter解析日志,自动暴露指标如nginx_log_entry_bytes_sent_sum{upstream="api-v2.example.com"} - PromQL 示例:计算最近 5 分钟各上游的平均下行速率
rate(nginx_log_entry_bytes_sent_sum[5m]) - Grafana 中叠加
$upstream_status和$bytes_sent,识别“高流量 + 高错误率”异常服务 - 对
$bytes_sent == 0且$upstream_status != 200的请求单独告警,提示上游未返回有效响应










