0%

Discuz 被爬虫打垮 - 分析报告

1. 解决方案

Cloudflare Managed Challenge,也就是机器人验证。
把除了 /msi-*.html 格式的 get 请求都给纳入机器人验证。

16:45 以后平均 1.03 req/s,5xx 只有 147 条。
对比 16:03-16:29 的 198.86 req/s,验证码把到达源站的流量压低了约 99.5%。

使用 cf 之前用过 nginx 硬限流,效果不好,会被错杀。

IP 几乎没有什么规律,只能从访问路径上进行限制。
也没法低成本做是否登录的判断。
先低成本的用 Cloudflare 吧,
以前看到别人说被爬虫打挂还感觉很夸张。

现在我只想说这些写爬虫的人,是不是没脑子?能不能爬正常的路径,而不是乱尝试。
本文是 Discuz 大版本迁移中的准备、切换与流量故障 的延续

2. 请求概览

14:17:08 开始,到 23:59:59 结束

指标数值
请求数421,341
独立 IP223,809
平均请求速率12.05 req/s
返回字节数773,237,000 字节,约 773 MB
平均响应大小1,835 字节
P50 请求耗时0 秒
P95 请求耗时9.121 秒
P99 请求耗时14.561 秒
最大请求耗时65.33 秒

3. 请求路径

请求 URI功能数量
/forum.php?mod=post&action=reply打开回复主题页面;实际发帖要再提交 POST62,770
/forum.php?mod=misc&action=postreview&do=support给帖子点赞、支持或“顶”57,523
/forum.php?mod=misc&action=postreview&do=against给帖子点踩、反对或“踩”57,557
/search.php?mod=forum&source=hotsearch论坛热搜搜索37,779
/forum.php?mod=viewthread查看帖子内容36,952
/home.php?mod=spacecp&ac=pm&op=showmsg查看私信会话32,972
/forum.php?mod=redirect按楼层、帖子或上下主题跳转29,270
/msi-*.html 标准帖子页Discuz 伪静态帖子详情页21,466
/plugin.php?op=ajax&subop=rob&id=yulegame_hdx娱乐插件“打劫”的 AJAX 入口8,790
/connect.php?mod=login&op=initQQ 互联或第三方登录初始化8,493

这些请求大多不是单次浏览,而是:

  • 反复渲染回复页、帖子页、跳转页和登录初始化页
  • 反复请求顶、踩、私信、关注、打招呼、加好友等互动入口
  • 用无意义查询串绕缓存,例如 /forum.php?147192=&mobile=no、/?746
  • 同一批请求指向 Discuz 中需要初始化会话、查数据库、生成模板的路径。

4. IP 分析

4.1 IP 分散度

每个 IP 的请求数IP 数量占独立 IP
1 次117,42652.5%
2 次58,50326.1%
3 次27,02512.1%
4 次11,8355.3%
≥ 5 次9,0204.0%

4.2 IP 国家分布

国家请求数占比
巴西44,41310.5%
西班牙34,0088.1%
美国24,1785.7%
加拿大23,0855.5%
法国20,8364.9%
哥伦比亚19,5434.6%
英国18,6814.4%
意大利16,3053.9%
中国15,8203.8%
德国14,1343.4%

4.3 全部 IP 信息

192.178.16.166 是谷歌的爬虫

全部 IP 信息:https://gist.github.com/hisenyuan/386433a2b18fad8849b5281e986c0d35

4.4 User-Agent

以 Mozilla/5.0 开头:419,299 条,99.5%
Windows Chrome 150-159:249,991 条,59.3%
明确匹配常见爬虫 UA:2,016 条,0.5%