已通过 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 解析已成功。
请帮忙。
pfaffman
(Jay Pfaffman)
2
听起来在启用 HTTPS 之前,你链接的是非安全图片。
在仔细检查所有日志后,发现错误出在 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
pfaffman
(Jay Pfaffman)
5
如果你知道一种无需额外软件即可测试这些记录的方法,我会考虑让 discourse-setup 对其进行测试,但我以前从未见过这种情况。
能找出这个问题,干得漂亮!
Stephen
(Stephen)
6
可以合理地假设,如果您拥有域名并了解 CAA,那么您应该能够配置它,并且理解 Let’s Encrypt 的相关影响。
@pfaffman
执行 dig caa {domain.tld} 将返回记录。
我们首先需要检查是否返回了任何记录。
然后,如果返回了记录,再检查签发机构是否为 letsencrypt.org 以外的机构。
但这种情况非常罕见。不确定我们是否要包含该检查。
@Stephen
没错。如果我拥有一个域名,我知道该如何操作它。
我原本是在帮助某人,这个问题可能出现在使用 cPanel 并与其他提供商(如 Comodo)合作提供自动 SSL 的主机商身上。当他们在 cPanel 中创建站点(如 WordPress)时,默认会添加一堆记录。
总之,这种情况非常罕见,我也是第一次遇到。
Stephen
(Stephen)
9
我们偶尔会看到 CAA 出现,当我们指出他们已限制整个域名的证书颁发时,通常得到的默认回应是🤦🏻♂️
@Stephen
这很有趣!我需要核实一下,我不确定我们能否针对完整域名锁定证书颁发。
针对整个域名的受限证书颁发,是指其所有子域名吗?
Stephen
(Stephen)
11
如果您为 @(即主域名)设置了 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 和代理。问题仍然存在。
我已经这样做了好几次,没有遇到过这个问题。但我绝对不是程序员、专家或任何相关人士。我只是一个快乐的最终用户。但这令人沮丧。
pfaffman
(Jay Pfaffman)
13
我最好的猜测是,您将 Cloudflare 设置为代理,并进行了足够的重建次数,从而达到了 Let’s Encrypt 的速率限制,现在您必须等待一周才能获得证书。
快速简单的解决方案是选择一个新的子域,将 Cloudflare 设置为仅 DNS,然后重建。如果可行,那么我的速率限制猜测是正确的,您可以喜欢这个新子域,或者等待一周,直到它允许您重试。
Benjamin_D
(Benjamin Decotte)
15
我只是在想同样的事情,我不确定这个请求,但如果找到一个有效的证书(刚刚重建了一个沙盒),似乎就不会颁发新的证书。