因 Cloudflare Bot 保护导致的三个 Mastodon 问题
Source: Dev.to
背景
我注意到我的博客上有三个 Mastodon 功能停止工作。每个看起来像是独立的问题,但它们共享相同的根本原因。下面我会描述这些问题以及简单的解决办法。
域名验证
Mastodon 允许你证明自己拥有某个域名。该机制需要两个步骤:
- 在页面中添加一个 “ 标签,指向你的 Mastodon 个人资料。
- 将你的网站 URL 添加到你的 Mastodon 个人资料中。
当 Mastodon 爬取你的页面并发现该反向链接后,会在个人资料中的 URL 旁显示绿色对勾。
我很早就完成了这项设置,博客和 GitHub 都能正常工作。后来博客的链接失效,而 GitHub 的仍然正常。
链接预览卡
当你在 Mastodon 上分享链接时,你的实例会爬取页面以生成预览卡。它会读取页面的 OpenGraph 标签(标题、描述、图片)。
我的博客拥有所有正确的标签,但每篇我分享的博客文章都只显示为普通链接,没有卡片。有趣的是,使用相同预览图片的新闻通讯能够正常显示。
作者归属
Mastodon 4.3 引入了作者归属功能。如果页面包含以下 meta 标签,Mastodon 在其他人分享链接时会显示 “By @author” 徽章——并允许其粉丝直接从预览中关注你:
在我为博客添加该标签后,它从未起作用。
共同机制
这三项功能都需要 Mastodon 的服务器爬取你的页面。问题的根源对每项功能都是相同的。
根本原因:Cloudflare Bot Fight Mode
我的博客使用 Cloudflare,并且启用了 Bot Fight Mode,这是一项阻止被认为可疑的自动流量的功能。服务可以在 Cloudflare 上注册域名,以便被识别为良好行为者(例如 Bluesky、Twitter)。
Mastodon 的爬虫运行在 Hetzner 基础设施上。Hetzner 的 IP 地址在 Cloudflare 数据库中拥有较高的威胁评分,因为它们常被机器人运营者使用。当 Mastodon 爬虫尝试获取我的页面时,Cloudflare 返回了 JavaScript 挑战而不是 HTML。Mastodon 的 http.rb 客户端无法解决 JavaScript 挑战,于是得不到有效响应,缓存了失败并继续前进。
解决办法
关闭 Bot Fight Mode:
- 登录 Cloudflare 仪表板。
- 前往 Security > Bots。
- 禁用 Bot Fight Mode。
关闭后,三个 Mastodon 问题一次性全部解决。对于公开的静态博客来说,Bot Fight Mode 提供的保护有限,却会主动阻断合法爬虫。
进一步阅读
- Cloudflare 隧道与 Mastodon
- Bot 保护阻止了有效的机器人
- 理解 Mastodon 预览卡显示逻辑
最初发表于 A Java Geek,2026 年 4 月 26 日。