识别静态资源盗流量需关注“高响应体传输+低业务关联性”组合:$body_bytes_sent大但referer非本站、ua异常、ip频次集中且路径为静态文件;关键日志字段缺一不可。

识别静态资源盗流量,核心是发现“高响应体传输 + 低业务关联性”的请求组合——$body_bytes_sent 值大,但 Referer 非本站、User-Agent 异常、IP 频次集中,且路径为可直接下载的静态文件。
关键日志字段必须启用
确保 log_format 中包含以下变量,缺一不可:
- $body_bytes_sent:真实响应体大小,盗链行为通常表现为单次请求返回数 MB 甚至上百 MB
- $http_referer:判断来源是否为合法域名,空值或非白名单域名(如 *.baidu.com、*.qq.com)需重点标记
- $request_uri:用于匹配静态后缀(.jpg/.png/.mp4/.pdf/.zip 等),并标准化路径(去除重复斜杠、查询参数干扰)
- $http_user_agent:识别采集器、下载工具(如 wget、curl、aria2)、爬虫 UA 或空白 UA
- $remote_addr(或 $http_x_forwarded_for):定位高频 IP,尤其注意同一 IP 在短时间(如 5 分钟)内大量请求不同资源
用命令快速筛查可疑盗链模式
以下命令从最近 24 小时日志中提取“高字节数 + 非本站 Referer + 静态路径”的 Top 10 请求路径:
zcat /var/log/nginx/access.log.*.gz 2>/dev/null | cat - /var/log/nginx/access.log | \
awk '$10 > 524288 && $5 ~ /^2/ && $12 !~ /^https?:\/\/(yourdomain\.com|www\.yourdomain\.com)\// && $7 ~ /\.(jpg|jpeg|png|gif|webp|mp4|avi|pdf|zip|rar|iso)$/i {path=$7; sub(/^\/+|\/+$/, "", path); print path " " $10 " " $12 " " $13}' | \
sort | uniq -c | sort -nr | head -10
说明:
- $10 > 524288 表示响应体超 512KB,过滤掉小图、图标等正常请求
- $12 是 $http_referer 字段位置(按标准 main 格式),检查是否来自你的一级域名
- 输出含路径、字节数、Referer、UA,便于人工复核是否为论坛、网盘、外链站批量引用
结合时间与频次做二次确认
单次大响应不等于盗链,需叠加行为维度:
- 同一 IP 在 10 分钟内请求 ≥20 个不同静态资源,且总 $body_bytes_sent > 5MB → 高风险采集行为
- Referer 为搜索引擎结果页(如 baidu.com/s?、google.com/url),但请求的是 zip 包或视频 → 常见“网盘资源索引页”盗链
- UA 含 “Download”、“Bot”、“Spider”,且 $body_bytes_sent 稳定在某个大文件大小(如始终 12.3MB)→ 自动化下载脚本特征
- 请求路径带明显参数痕迹(如 ?v=20260512、?t=1747044366),但文件本身无动态逻辑 → 伪装成动态实则盗取静态资源
确认后可立即落地的拦截手段
不必等分析完成再行动,发现即防:
- 用 valid_referers 拒绝无 Referer 或非法 Referer 的静态资源访问:
location ~* \.(jpg|png|mp4|pdf)$ {<br> valid_referers none blocked server_names yourdomain.com www.yourdomain.com;<br> if ($invalid_referer) { return 403; }<br>} - 对高频异常 IP,用 limit_req 限速(例如每分钟最多 5 个静态请求):
limit_req_zone $binary_remote_addr zone=static_limit:10m rate=5r/m;<br>location ~* \.(jpg|png|mp4)$ { limit_req zone=static_limit burst=10 nodelay; } - 对已确认盗链域名,在 CDN 或 Nginx 层添加 Referer 黑名单,直接 403 或返回占位图










