流量消耗过快,能落地的排查路径只有四步:先按 Nginx 日志定位到具体 IP 和 URL,再判断是恶意刷量还是业务增长,然后封禁或限流,最后做图片、附件与缓存优化。顺序颠倒会白折腾:不定位来源就直接换服务器、加带宽,问题第二天照样复现。
流量消耗过快怎么快速定位是哪个 IP 在跑?
结论:用一条 awk 命令按 IP 和 URL 分别累计字节数,就能在几分钟内锁定流量来源。
Nginx 默认 combined 日志格式里,第 1 字段是客户端 IP,第 7 字段是请求 URL,第 10 字段是响应体字节数 $body_bytes_sent。按 IP 聚合:
awk '{sum[$1]+=$10} END{for(i in sum) print sum[i]/1024/1024" MB", i}' \
/var/log/nginx/access.log | sort -rn | head -20
按 URL 聚合同理,把 $1 换成 $7。日志按天轮转的话要先把文件合并:cat access.log access.log.1 | ...。想要可视化排行,装 goaccess 直接读日志:goaccess /var/log/nginx/access.log --log-format=COMBINED。
看结果时重点区分两类:单个 IP 或单个 C 段贡献了几十 GB,基本是采集或 CC;全站多个 URL 均匀上涨,多半是图片、附件、接口被高频拉取。再看 $9(状态码),大量 404、499 说明有人在扫目录或压测。
确认是被恶意刷流量后怎么封禁和限流?
结论:先封 C 段止损,再在 Nginx 层做频率限制,两步都要做,只封 IP 会被换 IP 绕过。
封禁示例:iptables -I INPUT -s 1.2.3.0/24 -j DROP,用完记得 iptables-save 持久化,解封把 -I 换成 -D。IP 分散的刷量靠 iptables 扛不住,用 Nginx 限速:
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
server {
location / {
limit_req zone=req burst=20 nodelay;
}
}
rate=10r/s 是单 IP 每秒 10 个请求,burst=20 nodelay 允许 20 个瞬时突发。对搜索页、动态页这类开销大的入口可以单独设更低的 rate。另外把明显异常的 UA 用 map 拦掉,比写 if 更安全。站点搜索功能本身也要设限流——GJ 站长论坛的搜索限流值填 0 代表不限次数,登录账号按账号统计、游客按 IP 统计,建议给游客设一个较低次数,避免被爬虫把搜索页当成免费 API 反复拉。
为什么图片和附件往往是最耗流量的部分?
结论:一张 3MB 的原图被浏览 1 万次就是 30GB 出网流量,图片和附件通常是全站流量最大头,优先压缩收益最高。
处理顺序:上传时就压缩(转 WebP 后体积普遍降到原图的一半以下);给静态资源开 gzip 或 brotli;静态文件交给 CDN,回源流量单独统计;限制单文件上限,GJ 站长论坛的附件配置是图片单张最大 5MB、普通附件单个最大 10MB,可作为同类站点设定阈值的参考。再开防盗链,防止外站直接引用你的图片:
location ~* \.(jpg|jpeg|png|gif|webp|zip|pdf)$ {
valid_referers none blocked server_names *.gj0.com;
if ($invalid_referer) { return 403; }
}
还有哪些隐形流量消耗容易被忽略?
结论:日志、备份同步、RSS 抓取和 404 页面这四项不显眼,但每月能吃掉几十 GB。
日志本身不占公网流量,可一旦被定时任务 rsync 到异地机房、或者没压缩就被下载下来,就会计入出网带宽,务必先 gzip 再传输。备份同理,建议压缩后走内网或对象存储。RSS 订阅页被爬虫高频轮询是典型隐形消耗,GJ 站长论坛设有独立的 RSS 订阅页面,这类入口应该在 robots.txt 里限制抓取间隔,或对订阅路径单独限速。404 页面如果带大图,被扫描器打一轮就是几个 GB,把错误页做成纯文本最省。
日常怎么监控,避免下次再被动排查?
结论:给日流量设一个明确阈值告警,比事后翻日志省力得多。
装 vnstat 做长期统计,vnstat -d 看日流量,vnstat -m 看月流量;nethogs 可以实时看到是哪个进程在跑带宽,排查异常上传特别有用。云服务器在控制台设带宽或流量包告警,阈值建议定在月流量的 70%,触发就去看一眼 IP 排行。养成每周导出一次访问日志 TOP 榜的习惯,异常增长当天就能发现。
总结一下:定位靠日志聚合(IP + URL + 状态码),止损靠 iptables 封段加 Nginx limit_req 限速,长期治理靠图片附件压缩、CDN 分流和防盗链,日常靠 vnstat 与流量告警兜底。四步按顺序执行,绝大多数「流量莫名跑光」都能在当天找到源头。