头像、站点徽标和证书错误

你好!

我已经在约 5 个实例上部署了 Discourse 服务器,它们似乎都表现出异常行为;我不确定这是否确实是一个 Bug,或者其他人是否也遇到过同样的问题。

复现步骤

  • 服务器设置过程顺利
  • 向导引导流程正常,所有图片均按预期上传并显示
  • 用户收到注册链接,点击后完成注册,一切正常
  • (问题从这里开始)用户登录后,网站 Logo 全部损坏,仅显示文本标题
  • 用户无法上传或设置自定义头像
  • 网站证书提示该网站不安全
  • 不知为何,此问题仅影响用于注册的浏览器,且在 Chrome 中的失败率更高

故障排查

  • 我们已建议用户清除浏览器缓存和 Cookie,但问题依旧
  • 我们已请用户重新安装浏览器(主要是 Chrome),但问题依旧
  • 我们已请用户使用 Chrome 中的其他身份,或尝试其他浏览器(如 Safari、Firefox 等)——问题得以解决!

我们完全不明白为什么最后一种方法有效,而用于注册的原始身份却会出现问题。如果这确实是解决方案,要求我们约 600-700 名用户退出 Chrome 身份并重新登录是不可行的。

有任何建议吗?

祝好,
Mark

安装是标准的 30 分钟吗?还是有什么定制内容?

你是否在站点设置中启用了 force_https 来查看是否能解决该问题?

我在最新分支的沙箱环境中无法复现你的操作步骤,因此如果你能分享一个受影响的实例链接,将非常有帮助。

你好,Bahnu——

  • 标准 30 分钟安装
  • 无定制内容
  • 未启用 force_https,但正如我所说,此问题仅影响用于注册的浏览器

请尝试启用 force_https,我 99% 确定这能为您解决问题。

1 个赞

好的。所有安装实例的证书均来自一台反向 Nginx 代理,且该代理并非与实例同一台机器。在这种情况下,启用 force_https 是否仍有影响?

所以这不是标准安装。你之前说它是。\n\n如果 Discourse 位于正确配置的反向代理之后,force_https 设置确实会产生影响。该设置本质上会指示 Discourse 通过 HTTPS 加载所有资源和资产。

好的,抱歉。那么,我们是在讨论 app.yml 中的 force_https 还是我的 Nginx 服务器块?我已经正确传递了流量,但在 yml 文件中没有看到这个属性。

都不是。

force_https 是一个站点设置,你需要在管理区域中启用它。

这可能会导致我被锁在外面吗?

除非您的反向代理配置有误,否则此处完全无需担心。

如果您不确定反向代理配置,请查看此配置并与您的配置进行比对:

顺便提一下,确实如此。把我锁在外面吧。启用 force_https 解决了图片问题,但导致无法使用新会话从浏览器进行身份验证。现有会话没问题,但一旦注销,就无法再登录了。

你的反向代理出了问题。你需要检查其配置,确保一切设置正确。

已经完成了,我已经在服务器块中按照文章建议的方式有效配置了所有内容。这很可能就是为什么在初始注册/认证后,Alt 配置文件/浏览器中的会话能正常工作。我的配置中唯一不同的地方是,我没有使用 templates.yml。这需要投入大量精力进一步调查。

好的,有点奇怪。我什么都没改。所有图片都完全正常,没问题。

不过在初次安装时,仅在浏览器/用户端仍会遇到无效证书的问题。

这可能是浏览器缓存问题或证书配置不当。你使用的是 Let’s Encrypt SSL 还是其他类型的证书?

这是通过 Certbot 实现的 LetsEncrypt。证书有效,我认为是浏览器缓存的问题。

尝试在无痕模式下注册。您是否仍然收到错误?

另外,我怀疑这里有个问题。您是否使用了某种外部认证方式?(例如社交登录/单点登录等)

不行。没有外部认证。试过无痕模式,没用。结果一样。
肯定是服务器配置块里的问题。稍后我会再调查一下。

能分享一下其中一个安装链接吗?

你的 nginx 配置是否参考了这里列出的示例?

请确保你已发送 X-Forwarded-Proto 头。

4 个赞