我的博客后臺躺著三個"已失效"的Mastodon功能,互相看起來毫無關聯。花了20分鐘和Claude Code聊天后,發現它們死于同一個原因。
癥狀一:域名驗證突然變紅
![]()
Mastodon的域名驗證機制很直接。你在個人資料填上博客鏈接,同時在博客頁面放一個指向自己Mastodon賬號的反向鏈接,服務器爬取確認后,URL旁就會出現綠色對勾。
這個驗證我早年就配置好了,博客和GitHub都通過了。某天博客鏈接突然失效,GitHub卻正常。我檢查了半天HTML結構,沒找到問題。
癥狀二:預覽卡徹底消失
在Mastodon分享鏈接時,實例會爬取頁面生成預覽卡,讀取OpenGraph標簽的標題、描述和圖片。
我的博客標簽配置正確,分享出去卻只剩光禿禿的URL。詭異的是,我用同樣技術棧做的Newsletter分享時,預覽卡正常顯示。
癥狀三:作者歸屬從未生效
Mastodon 4.3版本新增了作者歸屬功能。頁面加入這行meta標簽后,他人分享鏈接時會顯示"By @作者"徽章,粉絲可直接從預覽頁關注作者:
我從添加那天起就沒見過它生效。
Cloudflare的"機器人格斗模式"是兇手
三個功能共享同一套機制:Mastodon服務器必須能爬取我的頁面。既然Newsletter預覽正常,問題不在我的博客代碼。
Claude Code檢查響應頭后發現了真相。我的博客跑在Cloudflare后面,我開啟了Bot Fight Mode——這項功能會攔截被判定為可疑的自動化流量。正規服務可以向Cloudflare注冊域名白名單,Bluesky和Twitter都這么做了。
Mastodon被自己的去中心化架構坑了。每個Mastodon實例運行在獨立域名下,我的實例是https://mastodon.top,其爬蟲部署在Hetzner服務器上。Hetzner的IP段在Cloudflare的威脅數據庫里評分極高——因為被機器人運營者大量使用。
Mastodon爬蟲請求我的頁面時,Cloudflare返回JavaScript挑戰頁而非HTML。Mastodon的http.rb客戶端解不了JS挑戰,拿到空響應,緩存失敗結果,然后放棄。
修復方案:關掉它
進入Cloudflare后臺Security > Bots,關閉Bot Fight Mode。這個開關對公開靜態博客幾乎沒保護作用,卻專門誤殺合法爬蟲。關掉后,三個Mastodon功能瞬間全部恢復。
這是Mastodon和Cloudflare社區里已知的老問題。去中心化架構在抗審查上的優勢,碰上中心化安全服務的黑名單機制,成了技術債。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.