Mastodon中继持续卡在「等待中继批准」状态的技术求助
解决Mastodon中继卡在「等待批准」&联邦时间线无内容的问题
问题背景
你管理的Mastodon实例出现以下问题:
- 联邦时间线无法接收跨联邦内容流
- 所有中继添加后均卡在「等待中继批准」状态
- Sidekiq抛出504(部分中继不可用属正常)和401未授权错误
- 已尝试重启nginx/mastodon-web、清除待处理队列、实时查看sidekiq日志,问题未解决
- 疑似与迁移至Soapbox前端相关
调试与解决步骤
1. 优先排查401错误根源(签名/域名配置)
401未授权是中继无法正常订阅的核心疑点,按以下步骤验证:
- 检查实例基础配置:登录Mastodon后台「设置-通用」,确认本地域名与实际访问域名完全一致;查看
.env.production文件中的LOCAL_DOMAIN、ALTERNATE_DOMAINS配置是否正确,若有修改需重启所有Mastodon服务:systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming - 验证实例签名有效性:在服务器上执行Mastodon内置工具,检查账号凭证是否正常:
若返回错误,说明签名密钥异常,可尝试重新生成密钥:su - mastodon RAILS_ENV=production bundle exec tootctl accounts verify_credentialsRAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key
2. 手动测试中继订阅请求
用curl模拟Mastodon向中继发送的订阅请求,直接排查网络与权限问题:
# 替换YOUR_INSTANCE为你的实例域名,RELAY_URL为测试中继地址 curl -X POST -H "Content-Type: application/json" \ -d '{"type": "Subscribe", "actor": "https://YOUR_INSTANCE/actor", "object": "https://RELAY_URL/inbox"}' \ https://RELAY_URL/inbox
根据返回结果判断:
- 401:实例签名未被中继认可,检查服务器HTTPS证书是否有效(可通过
certbot certificates查看)、签名密钥是否过期 - 504:中继服务器超时,更换公开可用的标准中继服务测试
- 200/202:说明请求正常,问题可能出在Mastodon内部队列或前端交互
3. 验证Soapbox与Mastodon兼容性
若问题确实出在迁移Soapbox之后:
- 核对Soapbox版本与Mastodon后端版本是否兼容,参考Soapbox官方版本适配说明,不兼容则回退到对应版本
- 清除前端缓存并重新构建:
su - mastodon cd soapbox rm -rf public/packs yarn build systemctl restart mastodon-web
4. 深入分析Sidekiq错误细节
- 访问实例的Sidekiq管理页面,点击「Retries」队列中的任务,查看完整错误堆栈,定位401错误的具体触发位置
- 实时抓包分析中继交互:
执行tcpdump port 443 -w relay_traffic.pcaptootctl sidekiq retry all后停止抓包,用Wireshark分析请求头中的Signature字段是否符合ActivityPub规范
5. 检查中继自身状态
- 访问中继主页,查看是否有手动批准订阅的规则,部分中继需要管理员手动通过新实例请求
- 用
curl -I https://RELAY_URL检查中继服务器是否正常运行,返回200状态码才说明中继可用
内容的提问来源于stack exchange,提问作者egremont of yorke
相关产品推荐
相关产品推荐

