更改 force_https 不会更新上传图片的 URL,导致混合内容警告

我刚刚在我的 Discourse 安装中启用了 force_https。HTTPS 终止由前置的反向代理处理。启用 force_https 会将 Discourse 的大部分内部链接切换为 https,但已存在的图片链接(特别是 favicons 和 logo)除外。现在通过 https 访问我的站点时,由于包含了非 https 的图片,会导致混合内容警告。

通过重新上传图片或在 Rails 控制台中执行 SiteIconManager.ensure_optimized!,可以将这些链接改为 https。这说明链接被缓存到了某个地方,当 force_https 更改时并未更新。

Discourse 在切换 force_https 时应该更新其已上传图片(以及可能所有上传文件)的链接。更好的做法是这些链接中根本不包含协议方案,尽管我不知道这是否可行。

2 个赞

你是如何安装的?Force_https 已经默认启用很长一段时间了。

3 个赞

我使用 discourse_docker 仓库构建 Docker 镜像(分为 web_only 和 data 两部分),并在 Kubernetes 云环境中运行这些镜像,其后端有一个处理 HTTPS 终止的代理。Discourse 容器仅监听 80 端口,且未在容器配置文件中启用 SSL 和 Let’s Encrypt 模板。看来正是 letsencrypt 模板将 force_https 设置为 true,因此在我的配置中,该选项默认未被启用。

不完全正确。它在配置时会被启用,但默认站点设置值为 false

我也见过有人在排查问题时禁用该站点设置,因为它会显示为“已更改”的设置。

2 个赞

请确保您的代理发送了此处 nginx 配置中设置的所有必要标头:

特别是,X-Forwarded-Proto 标头通常默认不包含在内。

3 个赞

即使代理发送了 X-Forwarded-Proto 等头部,这仍然是一个问题。

切换 force_https 站点设置不会更新徽标 URL 的协议,直到 icon_manager 缓存被清除。将 force_https 添加到图标管理器的 监控设置 中可能是最简单的解决方案。

6 个赞

没错!如果你执行的是标准安装,它会被自动设置,这就是我怀疑这不是标准安装的原因。

我很确定在我管理的 GKE 站点上,它是通过 DISCOURSE_FORCE_HTTPS 环境变量设置的,并且按预期工作。不过,我设置它已经是很久以前的事了,所以我可能会遗漏一些细节。

5 个赞

我检查了强制 HTTPS 设置,并重新启用了它。
这对我已经生效了。

1 个赞