如果你有一个自建的博客,并且打算或已经建立一个 Mastodon 实例,那么就不得不面对一个域名选择的问题了。假设你的博客是 example.com
,那么你的 Mastodon 账号应该是 [email protected]
还是 [email protected]
?
为了简单明了,你自然更希望博客域名和 Mastodon 域名是同一个。但是 Mastodon 无法运行在二级目录下。即使通过反代等手段,把 Mastodon 的 web 部分,转移到了某个二级域名或目录下,那么作为一个去中心化的服务,在与联邦宇宙其他实例节点交换数据时,很可能发生未知的问题。
幸运的是,联邦节点间通信的重要一步是访问 https://example.com/.well-known/host-meta
,这个文件的内容中包含了供后续步骤使用的 URL。而且 Mastodon 也支持 LOCAL_DOMAIN
和 WEB_DOMAIN
两个选项。
配置 Mastodon
编辑 .env.production
,进行如下修改:
- __不要__修改
LOCAL_DOMAIN
; - 添加 WEB_DOMAIN 配置,设置为一个二级域名,比如
mastodon.example.com
。
配置 mastodon.example.com
参考 Mastodon 文档,为 mastodon.example.com
配置一个 nginx 主机。重启 Mastodon 的 streaming/sidekiq/web 服务,重新载入 nginx 配置,现在 mastodon.example.com
已经可以访问了。
配置 example.com
但是外部实例尝试连接你的账号 [email protected]
时,尚不知晓你的地址是 mastodon.example.com,所以我们希望访问 https://example.com/.well-known/host-meta
时能返回 https://mastodon.example.com/.well-known/host-meta
的内容。
在 example.com
的 nginx 配置中,移除 Mastodon 的配置,仅添加如下规则:
location = /.well-known/host-meta {
return 301 https://mastodon.example.com$request_uri;
}
重新载入 nginx 即可。
更多配置
以上配置均来自于 felx 的补充文档 Using a different domain name for Mastodon and the users it serves。正如文中所说,尽管通过主域名跳转和 WEB_DOMAIN 配置,能够实现需求,但因为实例版本不一、客户端种类繁杂,难免仍会有奇怪的问题发生。
而且将已经运行了一段时间的 Mastodon 从主域名切换到二级域名,可能会有更明显的问题。
根据官方文档中的 Routes 章节,以及使用经验,建议为 example.com 设置如下规则,增加兼容性:
## mastodon web url
location ~ ^/(about/more|settings|web|pghero|sidekiq|admin|interact|explore|public|@.*|relationships|filters|terms|inert.css){
rewrite ^(.*) https://$mastodon_host$1 permanent;
}
## mastodon .well-known
location ~ ^/(.well-known/(host-meta|nodeinfo|webfinger|change-password|keybase-proof-config)|nodeinfo) {
rewrite ^(.*) https://$mastodon_host$1 permanent;
}
## mastodon system resources
location ~ ^/(system|headers|avatars) {
## set your mastodon public folder, or just redirect to $mastodon_host
#rewrite ^(.*) https://$mastodon_host$1 permanent;
root /home/mastodon/live/public;
}
## mastodon url (possible use post)
location ~ ^/(api/v1|inbox|actor|oauth|auth|users){
return 308 https://$mastodon_host$request_uri;
}
现在可以用 [email protected]
来嘟嘟了。
Webmention
评论表单
可以请教一下,按照最后的 nginx 写法,安卓客户端登录似乎有些问题,只能以local_domain 登录您那边有这种情况吗?查看 nginx 日志,似乎返回308重定向后客户端会判断为错误,不会发起连接。
我已经不再使用自建 Mastodon 了。当时的确存在这种情况,部分客户端只能以
local_domain
登录。看来,这么多年了,那些客户端还没有修正对 308 的处理。试试把 Mastodon 实例的 nginx.conf 中的 @proxy 配置复制过来,改一改吧写了教程也看不懂系列,tql
哈哈,这是第二步了。第一步搭建教程网上有很多,所以我跳过了