forum.abc.com.au 上的 Discourse 版本:未找到

已通过 GitHub 上的官方指南安装 Discourse。
一切顺利。但在访问论坛时出现 502 错误。

尝试查看 Rails 生产日志,但未发现 production_error 或 sidekiq 日志。

使用 tail 命令看到以下信息:
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
Can’t reach ‘/images/welcome/discourse-edit-post-animated.gif’ to get its dimension.

运行 discourse doctor 后显示:

Discourse version at forum.abc.com.au: NOT FOUND

尝试禁用 SSL 并重新构建后,可以正常访问论坛。

问题一定出在 SSL 上,但我无法查明原因。在安装 SSL 时,IP 解析已成功。

请帮忙。

听起来在启用 HTTPS 之前,你链接的是非安全图片。

@pfaffman 感谢您的回复。

这是全新安装。我们无法手动链接。

在仔细检查所有日志后,发现错误出在 Let’s Encrypt 证书颁发上。遇到类似问题的朋友可以参考以下解决方案。

首先,我在 Nginx 日志中看到了这个错误:

cannot load certificate "/shared/ssl/forum.abc.com.au.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)

然后尝试检查 SSL 日志:

forum.abc.com.au:Verify error:CAA record for forum.abc.com.au prevents issuance

在为子域名运行 Discourse 安装脚本之前,我们需要确认主域名是否包含任何 CAA 记录,并检查证书颁发机构(CA)是否不是 Let’s Encrypt(在我的案例中,主域名的 CAA 记录指向 comodoca.com)。如果主域名的 CAA 记录限制了证书颁发机构,那么您的 Discourse 子域名将无法获得 Let’s Encrypt 证书。

修复方法:您需要为 Discourse 子域名添加 CAA 记录,具体步骤请参考以下链接
Acme:error:caa :: CAA record for ... prevents issuance - Help - Let's Encrypt Community Support

删除旧的证书文件并重新构建:

rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app

如果你知道一种无需额外软件即可测试这些记录的方法,我会考虑让 discourse-setup 对其进行测试,但我以前从未见过这种情况。

能找出这个问题,干得漂亮!

可以合理地假设,如果您拥有域名并了解 CAA,那么您应该能够配置它,并且理解 Let’s Encrypt 的相关影响。

@pfaffman
执行 dig caa {domain.tld} 将返回记录。
我们首先需要检查是否返回了任何记录。
然后,如果返回了记录,再检查签发机构是否为 letsencrypt.org 以外的机构。

但这种情况非常罕见。不确定我们是否要包含该检查。

@Stephen

没错。如果我拥有一个域名,我知道该如何操作它。
我原本是在帮助某人,这个问题可能出现在使用 cPanel 并与其他提供商(如 Comodo)合作提供自动 SSL 的主机商身上。当他们在 cPanel 中创建站点(如 WordPress)时,默认会添加一堆记录。

总之,这种情况非常罕见,我也是第一次遇到。

我们偶尔会看到 CAA 出现,当我们指出他们已限制整个域名的证书颁发时,通常得到的默认回应是🤦🏻‍♂️

@Stephen

这很有趣!我需要核实一下,我不确定我们能否针对完整域名锁定证书颁发。

针对整个域名的受限证书颁发,是指其所有子域名吗?

如果您为 @(即主域名)设置了 CAA 记录,则该设置同时适用于顶级域名及其所有子域名。您仍可为子域名(如 subdomain.yourdomain.com)添加特定的 CAA 记录,以限制 Let’s Encrypt 等证书颁发机构(CA)可签发证书的适用范围。

示例如下:

domain.com.    CAA   0 issue "comodoca.com"
sub.domain.com.    CAA   0  issue "letsencrypt.org"

此外,您还可以使用 issuewild 替代 issue,以允许 CA 签发通配符证书;或使用 iodef 指定一个电子邮件地址,以便在发生策略违规时接收通知。

这里也有同样的问题。命令未能解决问题。我已经切换到 Cloudflare DNS 和代理。问题仍然存在。

我已经这样做了好几次,没有遇到过这个问题。但我绝对不是程序员、专家或任何相关人士。我只是一个快乐的最终用户。但这令人沮丧。

我最好的猜测是,您将 Cloudflare 设置为代理,并进行了足够的重建次数,从而达到了 Let’s Encrypt 的速率限制,现在您必须等待一周才能获得证书。

快速简单的解决方案是选择一个新的子域,将 Cloudflare 设置为仅 DNS,然后重建。如果可行,那么我的速率限制猜测是正确的,您可以喜欢这个新子域,或者等待一周,直到它允许您重试。

诚实地问一句:重建是否每次都会请求新证书?

我只是在想同样的事情,我不确定这个请求,但如果找到一个有效的证书(刚刚重建了一个沙盒),似乎就不会颁发新的证书。

如果不存在有效证书,则会。