直接用$body_bytes_sent监控代理流量异常,核心是识别“不该发那么多数据却发了”的请求,需结合$request、$upstream_addr、$upstream_response_length等字段区分正向/反向代理行为,并通过日志筛查、实时聚合与上下文关联分析定位滥用、扫描或配置错误问题。

直接用 $body_bytes_sent 监控代理流量异常,核心是识别“不该发那么多数据却发了”的请求——比如内网代理被滥用为外发通道、正向代理遭扫描或下载劫持、反向代理因配置错误回源后又透传大文件给客户端。
一、先确认日志里能准确区分代理请求
仅靠 $body_bytes_sent 不够,必须结合上下文字段才能判断是否属于代理行为:
-
正向代理(如 Squid/自建 HTTP 代理):看
$request是否为CONNECT方法或完整 URL(如GET http://example.com/file.zip HTTP/1.1),同时$host可能为空或为 IP; -
反向代理(如 Nginx 做 backend 转发):重点看
$upstream_addr和$upstream_response_length,若两者远小于$body_bytes_sent,说明响应体被本地加工或缓存污染; -
CDN 或中间代理回源日志:对比
$body_bytes_sent(发给终端用户)和$upstream_response_length(从源站收到),差值过大(如 >2×)可能意味着响应被动态压缩失败、分块传输异常或中间件注入内容。
二、定位高流量代理请求的实操方法
不用等告警,日常可快速筛查:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 查单个请求是否异常巨大:
awk '$(NF) > 5000000 {print $0}' /var/log/nginx/access.log(找 >5MB 的响应); - 按 URL 汇总流量 TOP10:
awk '{url=$7; bytes=$(NF); sum[url]+=bytes} END {for (u in sum) print sum[u], u}' /var/log/nginx/access.log | sort -nr | head -10; - 专盯代理特征路径:
awk '$7 ~ /^\/(proxy|tunnel|fetch|api\/forward)/ || $request ~ /CONNECT|http:\/\// {print $(NF), $7, $remote_addr}' /var/log/nginx/access.log | sort -nr | head -20; - 检查是否绕过缓存:若启用了
proxy_cache,但$body_bytes_sent高且$upstream_response_time也高,大概率未命中缓存,需查X-Cache: MISS头或$sent_http_x_cache字段。
三、设置轻量级实时监控与拦截逻辑
对已知代理端点(如 /proxy/ 或 POST /tunnel),不只看总量,更要看“单位时间突增”:
- 每分钟统计该路径的
$body_bytes_sent总和,超 100MB 就触发告警; - 同一
$remote_addr在 5 分钟内通过代理路径发出的$body_bytes_sent累计超 50MB,自动加入临时限速名单(用limit_req); - 若
$body_bytes_sent高但$status == 200且$http_user_agent == "-"或含curl/wget/,基本可判定为自动化工具滥用,建议在 server 块中加条件封禁:if ($request ~* "^(GET|POST) http://") { return 403; }。
四、关联分析避免误判
大流量未必是异常,得排除合理场景:
- 静态资源 CDN 回源后透传:检查
$sent_http_content_type是否为video/mp4、application/octet-stream等大文件类型; - 前端构建产物下载(如
/dist/app.js):看$uri是否匹配已知发布路径,且$http_referer来自自己域名; - 内部监控探针拉取日志快照:若
$http_user_agent是Internal-Health-Check,且来源 IP 在白名单段,可忽略。
关键不是数字本身,而是它出现在什么上下文里。把 $body_bytes_sent 当作“结果”,再倒推请求方法、目标地址、客户端身份和响应头,异常就很容易浮出水面。

















