为 Discourse 配置 Caddy 和 Cloudflare

大家好,

我在 community.website.com 上设置了 Discourse,在 website.com 上设置了 WordPress。我使用 Caddy 作为反向代理,并由 Let’s Encrypt 管理 SSL。在经历了一些初期的困难后,我让一切都顺利运行起来,包括 SSL 和重定向。在无数次尝试其他反向代理方法失败后,我选择了这个设置。对我来说,根本问题是我之前没有 Docker 或 Discourse 的经验。

我也明白缓存和 Discourse 可能会出现问题,所以也许越少越好,或者有一些规则可以避免问题。

当前设置:

  • Discourse: 通过 Docker 在 community.website.com 上运行。
  • WordPress: 安装在 website.com 上。
  • Caddy: 处理反向代理和 Let’s Encrypt SSL。
  • Cloudflare: 配置 DNS、防火墙和 CDN。

挑战:

当使用不代理的 Cloudflare DNS(仅用于 DNS)时,一切都运行正常——Caddy 管理 Let’s Encrypt SSL,并且没有问题。

然而,当切换到启用代理的 Cloudflare DNS 时,连接会失败,并出现 Cloudflare 的“网站已关闭”错误。我已经更新了我的 Caddyfile,为根域和子域都使用 http://,并在 Cloudflare 中尝试了多种 SSL 配置(Flexible、Full 和 Full Strict),但都未能建立连接。

问题是如何配置才能让 Caddy、带 SSL 的 Cloudflare 与 Discourse 协同工作?

任何建议都将不胜感激!

如果您正在使用 Cloudflare 的 CDN 和安全服务,则无需在源服务器上配置自己的 SSL 证书。而是导航到 Cloudflare 仪表板中的 SSL/TLS 设置,并创建一个“源证书”。此证书将保护从源服务器代理到 Cloudflare 的流量。将此源证书安装在您的源服务器上,一切都将正常运行。

2 个赞

您是在主机上运行 Caddy 和 Wordpress,还是在 Docker 容器中运行?

1 个赞

谢谢 @shannon1024!这是第一次遇到这种情况,但现在一切顺利,运行正常。

1 个赞

在 Docker 上运行。在 Discourse 目录中创建了一个用于存放证书的目录。我很高兴第一次就成功了 :smile:

1 个赞

步骤 5:配置 Discourse 使用 SSL 证书

  1. 编辑 Discourse 的 NGINX 配置以使用 SSL 证书。通常,此文件位于 /etc/nginx/conf.d/discourse.conf,或者如果您使用的是 Docker,则位于 /var/discourse/containers/ 目录中。

  2. 修改或添加以下行到 server 块:

https://developer.tenten.co/discourse-with-cloudflare-ssl

我正在尝试设置 CF 源服务器,但在这个阶段卡住了,找不到 discourse.conf 文件来修改,它通常在哪里?

据我所知,这里的说明并不完全正确,因为我在这些位置什么也没找到。

提前感谢您的任何帮助。