禁用Multisite后,旧的多站点域名仍然显示默认论坛

我们之前运行的是一个拥有约 22 个不同论坛的Discourse 多站点设置。最近,我们决定移除多站点配置,只保留默认站点:

现在默认站点: forum.mamapedia.com
已移除的旧多站点域名: forum.employ.com(以及其他 21 个)

问题:

即使在禁用多站点设置后,旧的多站点域名仍然可以访问默认论坛forum.mamapedia.com)。例如:

  • 访问 forum.mamapedia.com 按预期工作
  • 但访问 forum.employ.com 仍然加载 Mamapedia 论坛

我们期望像 forum.employ.com 这样的旧域名会:

  1. 显示错误(因为它们不再被配置)
  2. 正确重定向或完全不活动

设置说明:

  • 我们正在使用Cloudflare 的 SSL 证书,并启用了代理选项(流量不直接流向我们的服务器)。
  • 我们可以移除旧域名的 A 记录,但我们确实希望识别并修复根本原因,而不是依赖基于 DNS 的解决方法。

已采取的步骤:

  1. discourse.conf 和数据库中移除了多站点设置
  2. 重新启动了 Discourse 并验证了 app.yml 设置
  3. 清除了缓存并在隐身模式下进行了测试

预期行为:

  • forum.mamapedia.com 应继续正常工作
  • forum.employ.com 和其他旧域名不应访问 Mamapedia 论坛

问题:

  1. 如何正确移除旧域名,使其不再访问默认论坛?
  2. 我们是否需要调整 Nginx/Traefik 设置、Cloudflare 设置,还是我们遗漏了 Discourse 特定的配置?

Nginx 配置

你需要切换到标准安装。你为使它成为多站点所做的设置,是为了让服务器能够服务多个域名。

如果你新建一台服务器并还原备份,你就不会破坏任何东西,因为你只需切换回旧的服务器即可。

唯一需要注意的是,在重建的同时,你需要将 DNS 指向新服务器,以便获取证书。并且让 Cloudflare 只负责 DNS。

1 个赞

感谢 @pfaffman,我们尝试从 多站点 设置切换到 标准安装,但问题仍然存在。

我们做了什么:

  1. 移除 Discourse 安装:
    • 删除了整个 /var/discourse 目录。
  2. 重新安装 Discourse:
    • 再次克隆了 Discourse 仓库。
    • 使用必要的配置重新创建了 app.yml
  3. 重新构建应用:
    • 运行了 ./launcher rebuild app
  4. 更新 DNS:
    • 将域名指向了新服务器。
    • 将 Cloudflare 设置为 仅 DNS 模式以允许颁发 SSL 证书。

SSL 的额外问题:

问题:

  1. 问题是否可能与未恢复数据库备份有关?
  2. 是否需要额外的步骤来清理旧的多站点配置?
  3. 在此设置中正确启用 SSL 而不遇到问题的方法是什么?

感谢有经验的人提供任何指导!

1 个赞

您是运行了 discourse setup 还是手动配置的?

您有 ssl 和 let’s encrypt 模板吗?

如果您多次使用橙色云进行重建,您可能会受到速率限制。

1 个赞

发生这一切的原因很简单。Multisite 将根据主机名选择一个论坛。 非 Multisite 安装将乐意接受你指向它的任何主机名。只要你让所有的旧主机名指向那个安装,它就会在所有这些主机名上提供剩余的网站。

让旧记录指向你的站点,就是 根本原因。
清理你旧的配置不是一种变通方法,而是解决方案。

2 个赞

OMG。我不记得上次在事实问题上与您意见不合是什么时候了。通常,当我看到您在某个我已评论过的话题中的头像时,我就知道我会学到东西!

这是真的。但他们声称他们切换到了标准安装。我不相信他们。

多年来(但我认为自从 Let’s Encrypt 可用以来),在标准安装中,如果您通过任何其他主机名访问它,它会进行重定向(您可以通过 IP 地址轻松检查,我刚刚通过在 /etc/hosts 中将 forum.bigmouth.bass 设置为标准安装进行了另一次检查,它按预期重定向了。如果您通过 HTTPS 访问它,现在大多数浏览器默认都会这样做,您会收到证书错误。

如果访问您网站只需更改 DNS 即可通过其他主机名访问,那么任何人都可以通过创建指向您网站的 DNS 记录来劫持您的网站。

我认为这是关键:

我猜 app.yml 中仍然有类似这样的内容:

3 个赞

[引用=“Jay Pfaffman,第6帖,主题:351365,用户名:pfaffman”]
我知道我一定会学到一些东西!
[/引用]

哦,直到今天我才知道我应该更经常更新我的事实!那段代码从2014年就存在,所以我猜我活得远在过去了。

你完全正确,它会跳转。

2 个赞

感谢@RGJ ,@pfaffman

我们已经检查了 app.yml,没有自定义的重定向配置或覆盖。然而,我们的实例仍然没有将未知主机名重定向到主域名。

  1. Nginx 配置:是否有办法确认模板 web.ssl.template.yml 中的重定向逻辑是否真正被应用?我们是否应该手动检查容器内生成的 Nginx 配置?

  2. Discourse 调试:是否有任何日志或命令可以在容器内运行,以确认 Discourse 是否正确处理主机名?

  3. 其他可能的原因:如果 app.yml 是干净的,有什么其他因素可能阻止预期的重定向行为?Cloudflare 或其他设置是否可能干扰?

非常感谢任何指引,帮助深入排查!

这是个提示。

所有的旧域名都开启了橙色云吗?禁用橙色云能解决问题吗?如果可以,正如我一直预期的那样,理查德是对的,你需要清理你的设置。

但是,如果使用 Cloudflare 允许不良行为者(在此情况下是你)在他人域上托管他人的网站,这似乎是个问题。

1 个赞

好的,我应该在下载 discourse 后运行

./discourse-setup

还是在下载后粘贴我旧的 app.yml 然后运行

./launcher rebuild app

我应该走哪条路?

1 个赞

我们已经删除了旧的域名,但是的,它们启用了橙色按钮。现在的问题是,如果有人获得了我们的服务器 IP 并在那里设置了 A 记录并启用了代理选项,它将使用他们的域名来提供我们的网站。

1 个赞

您应该运行 discourse-setup 来确保您确实拥有标准安装。如果您粘贴旧的 app.yml,其中可能包含不属于它的内容。我仍然不完全相信您拥有标准设置。

我仍然不相信是这种情况,但如果确实如此,您也无能为力。

1 个赞

世界上大多数服务器IP都是公开的。IP系统的目的就是如此。

1 个赞

非常感谢 @pfaffman@RGJ,现在已经清理干净,基本可以了。

我们现在面临的问题是,所有的品牌图片都消失了,一些用户的图片也消失了。

品牌数据是好的,我可以从旧服务器下载,但用户图片和所有网站图片也丢失了怎么办?

新服务器

旧服务器

备注:

1 个赞

如果这不是多站点的主站点,那么上传的路径将是名称和站点,而不是默认值。

1 个赞

查看缺失的图片,它们似乎有一个“嵌套”的 URL,这是其中一个:

(https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png)

@pfaffman,这实际上是多站点设置中的主站点。

抄送:@Abdelrahman_MoHamed

嗯。好吧,如果这是主站,我期望该路径是 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”保存问题。提前感谢任何能解决此问题的想法!