通过代理使用 HTTPS;Discourse 仍尝试使用 HTTP 获取文件

你好!我刚刚尝试设置我的 Discourse 论坛。当我点击电子邮件中的链接时,看到了一个按钮,但无法点击。我注意到出现了一些错误,这似乎是因为它正在尝试通过 HTTP 加载文件。这可能是由于我没有通过 Discourse 使用 HTTPS,而是通过 Apache2 Web 服务器使用 ProxyPass 实现的。如何在不使用 Discourse 的 HTTPS 的情况下,让文件通过 HTTPS 请求?(或者告诉我一种方法,将我现有的 .crt 和 .key 文件与 Discourse 配合使用,这样也能正常工作:wink:)

你在 Discourse 中启用了强制 HTTPS 吗?

1 个赞

我该怎么做?(不使用 LetsEncrypt 或通过 Discourse 的 SSL)
我只需要取消注释 templates/web.ssl.template.yml,并保留 templates/web.letsencrypt.ssl.template.yml 为注释状态吗?(抱歉提问,但重新构建需要很长时间,所以我更想先确认清楚)

您只需进入设置,勾选“强制 HTTPS”选项即可。

需要明确的是,在启用该设置之前,请务必确认您的反向代理能够处理 Discourse 的 SSL。

:warning: Discourse 与 Apache2 兼容性不佳……如果可能,请迁移到 Nginx。

等等,什么设置?我到底该在哪里找到那个复选框?

community.example.net/admin 是您找到 Discourse 管理面板的路径。

但为此我首先需要在我的论坛上拥有一个账户,而在修复 HTTPS 问题之前我无法创建该账户。

你可以通过控制台启用强制 SSL:

./launcher enter app
rails c
SiteSetting.force_https = true
exit
exit
1 个赞

在那之后我需要重新构建或做任何其他操作吗?
编辑:我已经重新构建了。但仍然出现同样的错误,提示某些文件仍通过 HTTP 加载。

force_https 已从管理界面中移除,因为它造成的困惑多于实际帮助。

由于 Discourse 现在默认安装 HTTPS,只有在像本例这样的情况下才需要手动启用它。

1 个赞

对我来说默认并未启用。我在运行安装脚本时遇到了问题,所以我编辑了 app.yml。这就是原因吗?

您是否通过禁用 HTTPS 模板,在代理后使用 HTTP?

对我来说,两个 HTTPS 模板默认是禁用的。
Discourse 在服务器 2 上运行于两个默认端口。
我在服务器 1 上的 Apache2(已配置 SSL)的 VHost 中使用了 ProxyPass。
我刚刚注意到,我只需通过 Discourse 启用 HTTPS,并且由于 Discourse 运行在默认端口上,我可以直接将 community.website.tld 指向服务器 2 的 IP 地址。
我该如何启用 SSL?取消注释那两个模板,然后输入 Let’s Encrypt 的电子邮件地址吗?另外,我该如何在 Let’s Encrypt 上创建账户?我在他们的网站上找不到任何“注册”按钮。

基本上就是这样:启用 HTTPS 和 Let’s Encrypt 模板,确保端口 443 已暴露,并在重新构建之前指定一个邮箱地址。

将 Discourse 放在代理后面几乎没有太多正当理由。如果它拥有专用服务器和完全限定域名(FQDN),使用上述方法会更容易管理。

但我需要在那里指定哪个电子邮件地址?它提到需要一个 Let’s Encrypt 账户,所以我需要创建一个吗?在哪里创建?

只需一个用于接收通知的邮箱。您无需提前注册该邮箱。

我刚刚启用了 SSL 等功能,但现在却出现了 Cloudflare 502 错误。

请确保代理正确地将 X-Forwarded-Proto 头设置为 https,这将修复 HTTPS 检测问题。

1 个赞

暂时关闭 Cloudflare。除非您经常遭受攻击,否则它带来的弊大于利。

如果启用了橙色云朵,Discourse 将无法从 Let’s Encrypt 获取证书。

已经处理。HTTPS 现在可以正常工作,所有内容都通过 HTTPS 加载,但是:
我仍然无法点击账户验证页面上的按钮。


控制台中也显示了一个错误和几条警告: