使用 CloudFlare 模板

几个小时前,我将 Cloudflare 设置为我的 Discourse 站点(example.com)的 CDN(灰色云朵图标)。之后我发现了以下内容:

因此,我添加了(最后一行)

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## 如果您想添加 Lets Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

我的问题是:如果仅将 Cloudflare 用作 Discourse 的 CDN,这样做是否有必要?还是我误解了指令?如果是不必要的,我不想添加这些模板。

8 个赞

简而言之,因为 CloudFlare 并非典型的 CDN。

灰色云朵表示 CloudFlare 仅为此地址提供 DNS 服务。

如果开启橙色云朵,它将改变对外显示的 IP 地址,并通过其网络代理所有流量。这使得它既能“保护”服务器,又能缓存图片、JavaScript 等资源。

之所以需要配置模板,是因为一旦 CloudFlare 位于您的网站与外界之间,您的服务器将只能看到来自 CloudFlare IP 的连接。通过使用模板,您的网站将再次看到客户端 IP,这些 IP 由 CloudFlare 通过 CF-Connecting-IP 头部转发。

如果未正确配置此项,您将看到连接限制错误,并遇到有关注册 IP 地址的错误,因为所有用户流量似乎都来自少数几个地址。

如果您决定启用 CloudFlare CDN(橙色云朵),还需要再执行一步:为您的 Discourse 实例地址设置页面规则。该规则需要“禁用性能优化”,这将关闭 CloudFlare 中已知会干扰 Discourse 的功能。

请注意,如果您使用 CloudFlare 作为网站的前置服务,而不是 S3 存储桶,那么您的服务器与互联网上的客户端之间将增加额外的网络跳转。请记住,Discourse 不是一个静态网站,而是一个 JavaScript 应用程序。一旦 Discourse 在浏览器中加载完成,用户点击链接时就不再下载页面。增加这些额外的网络跳转会给每次点击带来轻微但并非完全不可察觉的延迟。

除非您的网站正遭受攻击,否则使用 CloudFlare 的明智做法是将资源迁移到 S3(对象存储,而非 CDN),然后在 S3 存储前面使用 CloudFlare。这样,客户端通信依然迅速,资源下载带宽得以减少,最重要的是,您可以释放 Discourse 服务器上的本地存储空间。

14 个赞

真不敢相信,我的网站运行了一年,竟然一直没正确配置 Cloudflare。让我惊讶的是,我居然没发现任何错误。谢谢你的信息!

1 个赞

谢谢,@Stephen。这非常有启发性。我的主要结论是,Cloudflare 可能不是我的最佳选择,因为传统 CDN 的干扰更小——尽管它们缺乏 DDoS 防护。

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.