因 Cloudflare Bot 保护导致的三个 Mastodon 问题

发布: (2026年4月30日 GMT+8 17:02)
4 分钟阅读
原文: Dev.to

Source: Dev.to

背景

我注意到我的博客上有三个 Mastodon 功能停止工作。每个看起来像是独立的问题,但它们共享相同的根本原因。下面我会描述这些问题以及简单的解决办法。

域名验证

Mastodon 允许你证明自己拥有某个域名。该机制需要两个步骤:

  1. 在页面中添加一个 “ 标签,指向你的 Mastodon 个人资料。
  2. 将你的网站 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:

  1. 登录 Cloudflare 仪表板。
  2. 前往 Security > Bots
  3. 禁用 Bot Fight Mode

关闭后,三个 Mastodon 问题一次性全部解决。对于公开的静态博客来说,Bot Fight Mode 提供的保护有限,却会主动阻断合法爬虫。

进一步阅读

  • Cloudflare 隧道与 Mastodon
  • Bot 保护阻止了有效的机器人
  • 理解 Mastodon 预览卡显示逻辑

最初发表于 A Java Geek,2026 年 4 月 26 日。

0 浏览
Back to Blog

相关文章

阅读更多 »

自己制作框架,有什么建议吗?

《Making my own framework》的封面图片。有什么建议吗?https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fde...