带宽占满、CPU 却闲着,这种站我碰上过不少。第一反应基本都是「被打了」,赶紧上高防、加钱升配,第二天一看,账单上去了,情况没变。真凶常常不是人,是机器,而且是按点打卡、还挺有礼貌的那种——蜘蛛袭击。搜索引擎的、做数据采集的、比价抓价格的、现在还有一堆抓语料喂模型的,混在一起轮着班来敲你的页面。

蜘蛛袭击跟 DDoS 压根不是一回事
DDoS 来的时候很暴力,同一个 IP 在一秒里连着打几十次,路径还都一样,日志一眼就看出来。蜘蛛袭击安静得多:来源散、频率低、请求的都是真实存在的页面,UA 还写着正经名字。监控不报警,带宽却一直挂在顶上。这两件事分不清,钱就容易白花。
还有一种误判更常见,把自家定时任务当成了攻击。备份脚本、sitemap 生成、站内搜索的预热任务,全都挤在一个时间点跑,日志里瞬间一片自家 IP。先看一眼那些高频 IP 是不是你自己的机器,再谈封不封。
蜘蛛袭击的第一现场在访问日志
上服务器,先干这个:`awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -50`,看谁在刷;再按 UA 分一遍,粗一点就直接 grep。翻的时候顺便看时间分布,真用户是有波峰的,爬虫那条线往往平得像拿尺子画的。有人上来就封一整个 IP 段,结果连 CDN 回源的地址一起封掉,站点对外直接报错——这种事故我见过不止一次。
日志本身也会占地方。请求量被爬虫顶起来以后,`access.log` 长得飞快,磁盘写满又是一场新麻烦。切割和压缩按天做,保留几天够查就行,别什么都往硬盘里堆。
蜘蛛袭击最爱啃的是你不当回事的页面
搜索结果页 `/?s=`、日历归档 `/2023/05/`、tag 聚合页、带筛选参数的列表页,还有 `?page=` 一路翻到底的分页。单个页面都没毛病,问题是它们组合起来近乎无穷,爬虫顺着链接一页一页翻,能翻出成千上万个不同 URL,每个都触发一次数据库查询,缓存还命中不了。带宽和 CPU 就是这么被啃掉的。
装成好人的那种,最难缠
有些采集器的 UA 直接写成 Googlebot,你一看就放行。判断办法只有一个:反查来源 IP 是否属于官方公布的地址段,具体的段列表以搜索引擎官方页面说明为准,别信第三方整理的旧表,那玩意儿过期好几年了。反过来也得留神,限流规则写太狠,把真蜘蛛一起拦在门外,收录掉下去,损失比那点带宽大得多。
我的顺序:限流、缓存,最后才封
nginx 里先上 `limit_req_zone` 和 `limit_conn`,按 IP 和 UA 各限一层,阈值照着自己真实用户量往上抬一点,别照抄网上模板。然后给动态页加缓存,尤其是被翻得最凶的那几个列表页。再往下才是封 IP 段、上防火墙。顺序反了,通常是先误伤自己人。
抓取节奏是可以谈的
搜索引擎的站长后台一般都有抓取速率的设置入口,把速度压下来,让它少翻那些没价值的组合页,比直接封 IP 温和,也不影响正常收录,具体入口和能力以官方页面说明为准。robots.txt 也写清楚点,但记住它只对守规矩的有效,专门做采集的那些根本不看这个文件。
闹完之后,账单上会留印子
带宽计费方式不一样,挨打的方式也不一样。按流量计费的,爬虫刷多少你付多少,月底一看数字往上跳;按峰值计费的,半夜被拉起来的那一段,可能把整个月的档位都顶高一档。签约前把计费口径问清楚,比事后吵有用。
顺手说一句 CDN
静态资源和热门页面放到 CDN 上,回源请求少一大截,压力自然轻一些。但别把它当免费挡箭牌,被刷出来的流量照样计费,各家口径还不一样。真实用户量不大的站,往往靠限流加缓存就够了,不必一上来就堆配置。
回头看就三件事:日志里先分清是人还是爬虫,把那些组合起来能无限翻的页面加 noindex 或者干脆缓存掉,限流阈值按真实访问量设、宁可松一点。真到要买高防那一步再说,多数站根本走不到。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!