我们之前运行的是一个拥有约 22 个不同论坛的Discourse 多站点设置。最近,我们决定移除多站点配置,只保留默认站点:
现在默认站点: forum.mamapedia.com
已移除的旧多站点域名: forum.employ.com(以及其他 21 个)
问题:
即使在禁用多站点设置后,旧的多站点域名仍然可以访问默认论坛(forum.mamapedia.com)。例如:
- 访问
forum.mamapedia.com 按预期工作
- 但访问
forum.employ.com 仍然加载 Mamapedia 论坛
我们期望像 forum.employ.com 这样的旧域名会:
- 显示错误(因为它们不再被配置)
- 正确重定向或完全不活动
设置说明:
- 我们正在使用Cloudflare 的 SSL 证书,并启用了代理选项(流量不直接流向我们的服务器)。
- 我们可以移除旧域名的 A 记录,但我们确实希望识别并修复根本原因,而不是依赖基于 DNS 的解决方法。
已采取的步骤:
- 从
discourse.conf 和数据库中移除了多站点设置
- 重新启动了 Discourse 并验证了
app.yml 设置
- 清除了缓存并在隐身模式下进行了测试
预期行为:
forum.mamapedia.com 应继续正常工作
forum.employ.com 和其他旧域名不应访问 Mamapedia 论坛
问题:
- 如何正确移除旧域名,使其不再访问默认论坛?
- 我们是否需要调整 Nginx/Traefik 设置、Cloudflare 设置,还是我们遗漏了 Discourse 特定的配置?
Nginx 配置
pfaffman
(Jay Pfaffman)
2
你需要切换到标准安装。你为使它成为多站点所做的设置,是为了让服务器能够服务多个域名。
如果你新建一台服务器并还原备份,你就不会破坏任何东西,因为你只需切换回旧的服务器即可。
唯一需要注意的是,在重建的同时,你需要将 DNS 指向新服务器,以便获取证书。并且让 Cloudflare 只负责 DNS。
1 个赞
感谢 @pfaffman,我们尝试从 多站点 设置切换到 标准安装,但问题仍然存在。
我们做了什么:
- 移除 Discourse 安装:
- 重新安装 Discourse:
- 再次克隆了 Discourse 仓库。
- 使用必要的配置重新创建了
app.yml。
- 重新构建应用:
- 运行了
./launcher rebuild app。
- 更新 DNS:
- 将域名指向了新服务器。
- 将 Cloudflare 设置为 仅 DNS 模式以允许颁发 SSL 证书。
SSL 的额外问题:
问题:
- 问题是否可能与未恢复数据库备份有关?
- 是否需要额外的步骤来清理旧的多站点配置?
- 在此设置中正确启用 SSL 而不遇到问题的方法是什么?
感谢有经验的人提供任何指导!
1 个赞
pfaffman
(Jay Pfaffman)
4
您是运行了 discourse setup 还是手动配置的?
您有 ssl 和 let’s encrypt 模板吗?
如果您多次使用橙色云进行重建,您可能会受到速率限制。
1 个赞
RGJ
(Richard - Communiteq)
5
发生这一切的原因很简单。Multisite 将根据主机名选择一个论坛。 非 Multisite 安装将乐意接受你指向它的任何主机名。只要你让所有的旧主机名指向那个安装,它就会在所有这些主机名上提供剩余的网站。
让旧记录指向你的站点,就是 根本原因。
清理你旧的配置不是一种变通方法,而是解决方案。
2 个赞
pfaffman
(Jay Pfaffman)
6
OMG。我不记得上次在事实问题上与您意见不合是什么时候了。通常,当我看到您在某个我已评论过的话题中的头像时,我就知道我会学到东西!
这是真的。但他们声称他们切换到了标准安装。我不相信他们。
多年来(但我认为自从 Let’s Encrypt 可用以来),在标准安装中,如果您通过任何其他主机名访问它,它会进行重定向(您可以通过 IP 地址轻松检查,我刚刚通过在 /etc/hosts 中将 forum.bigmouth.bass 设置为标准安装进行了另一次检查,它按预期重定向了。如果您通过 HTTPS 访问它,现在大多数浏览器默认都会这样做,您会收到证书错误。
如果访问您网站只需更改 DNS 即可通过其他主机名访问,那么任何人都可以通过创建指向您网站的 DNS 记录来劫持您的网站。
我认为这是关键:
我猜 app.yml 中仍然有类似这样的内容:
3 个赞
RGJ
(Richard - Communiteq)
7
[引用=“Jay Pfaffman,第6帖,主题:351365,用户名:pfaffman”]
我知道我一定会学到一些东西!
[/引用]
哦,直到今天我才知道我应该更经常更新我的事实!那段代码从2014年就存在,所以我猜我活得远在过去了。
你完全正确,它会跳转。
2 个赞
感谢@RGJ ,@pfaffman ,
我们已经检查了 app.yml,没有自定义的重定向配置或覆盖。然而,我们的实例仍然没有将未知主机名重定向到主域名。
-
Nginx 配置:是否有办法确认模板 web.ssl.template.yml 中的重定向逻辑是否真正被应用?我们是否应该手动检查容器内生成的 Nginx 配置?
-
Discourse 调试:是否有任何日志或命令可以在容器内运行,以确认 Discourse 是否正确处理主机名?
-
其他可能的原因:如果 app.yml 是干净的,有什么其他因素可能阻止预期的重定向行为?Cloudflare 或其他设置是否可能干扰?
非常感谢任何指引,帮助深入排查!
pfaffman
(Jay Pfaffman)
10
所有的旧域名都开启了橙色云吗?禁用橙色云能解决问题吗?如果可以,正如我一直预期的那样,理查德是对的,你需要清理你的设置。
但是,如果使用 Cloudflare 允许不良行为者(在此情况下是你)在他人域上托管他人的网站,这似乎是个问题。
1 个赞
我们已经删除了旧的域名,但是的,它们启用了橙色按钮。现在的问题是,如果有人获得了我们的服务器 IP 并在那里设置了 A 记录并启用了代理选项,它将使用他们的域名来提供我们的网站。
1 个赞
pfaffman
(Jay Pfaffman)
13
您应该运行 discourse-setup 来确保您确实拥有标准安装。如果您粘贴旧的 app.yml,其中可能包含不属于它的内容。我仍然不完全相信您拥有标准设置。
我仍然不相信是这种情况,但如果确实如此,您也无能为力。
1 个赞
Jagster
(Jakke Lehtonen)
14
世界上大多数服务器IP都是公开的。IP系统的目的就是如此。
1 个赞
非常感谢 @pfaffman 和 @RGJ,现在已经清理干净,基本可以了。
我们现在面临的问题是,所有的品牌图片都消失了,一些用户的图片也消失了。
品牌数据是好的,我可以从旧服务器下载,但用户图片和所有网站图片也丢失了怎么办?
新服务器
旧服务器
备注:
1 个赞
pfaffman
(Jay Pfaffman)
16
如果这不是多站点的主站点,那么上传的路径将是名称和站点,而不是默认值。
1 个赞
查看缺失的图片,它们似乎有一个“嵌套”的 URL,这是其中一个:
(https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png)
@pfaffman,这实际上是多站点设置中的主站点。
抄送:@Abdelrahman_MoHamed
pfaffman
(Jay Pfaffman)
18
嗯。好吧,如果这是主站,我期望该路径是 https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png,但这也不起作用。
如果你还有旧站,我会备份这个站并将其恢复到新站。
感谢 @pfaffman,到目前为止我所做的似乎有效。
我进入了旧服务器,并将数据从 /var/discourse/shared/standalone/uploads/default 移动到新服务器上的相同路径,所有用户头像和帖子都回来了。
现在的新问题是网站品牌形象不工作,即使我尝试更新它。
这是我录制的一分钟屏幕录像
https://www.veed.io/view/89c9e122-57bd-40b3-a5c5-d510a56973e4?panel=share
1 个赞
回来看看是否有人有什么想法。我们这边快要完成了,只需要一些帮助来解决“非logo”保存问题。提前感谢任何能解决此问题的想法!