为您的 Discourse 启用 CDN

那么您想使用内容分发网络 (CDN) 来加快全球用户访问您的 Discourse 论坛上的常用资源的访问速度吗?您可能希望完全投入并参考 https://meta.discourse.org/t/setting-up-file-and-image-uploads-to-s3/7229(另请参阅 https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916)。

如果您想要一个没有 S3 带来的额外复杂性并且不需要使用两个 CDN 的 CDN,那么本指南适合您。CDN 将通过让 CDN 为这些资源提供服务来减轻您服务器的部分负载,从而无需服务器处理。它还可以通过从更靠近最终用户的位置交付文件来提高速度。

请注册您选择的 CDN——CDCK/discourse.org 已经使用并强烈推荐 Fastly

配置将如下所示:

您需要查找三个主要设置:

  1. 源地址 (origin address),即您的论坛当前所在的 URL,例如 discourse.example.com。这是 CDN 在首次请求时从中获取所有原始内容的位置。

  2. CNAME,即您将在 DNS 中设置的 CDN 的“友好”名称,例如 discourse-cdn.example.com

  3. CDN URL,即缓存的 CDN 资产将通过 CDN 的全球分布式服务器网络提供的“不友好”名称。它看起来像 637763234.cdn-provider.com

您需要编辑您的 DNS,将 CNAME 映射到 CDN URL,如下所示:

discourse-cdn.example.com IN CNAME 637763234.cdn-provider.com

(编辑 DNS 后,请给它一点时间进行传播。)

设置中实际的 Discourse 部分相当简单。取消注释 app.yml 中的 CDN 行,并用您刚刚在 DNS 中设置的 CNAME 更新它:

    ## The http or https CDN address for this Discourse instance (configured to pull)
    DISCOURSE_CDN_URL: https://discourse-cdn.example.com

:warning: CDN URL 必须包含协议(https://http://)。 不再支持协议相对 URL(以 // 开头),这将导致容器构建中止。

(如果您在 app.yml 中看不到此行,请将其添加到其他 DISCOURSE_ 变量下方)

与对 app.yml 的任何其他更改一样,您需要重建容器以反映更改:

./launcher rebuild app

重建后,在浏览器中访问您的 Discourse 实例。查看源代码并搜索“cdn”。您将看到网站资产现在来自您的 CDN:

<script src="https://discourse-cdn.codinghorror.com/assets/preload_store-4ea79c2f435becca86ac97a9c038f9c7.js"></script>
<script src="https://discourse-cdn.codinghorror.com/assets/locales/en-7084a68855205a9128245d2d0ce94ed9.js"></script>

本主题涵盖了更常见静态资源加速的场景。有关完全站点的(动态和静态资源)CDN 加速(如 Cloudflare 提供的),请参阅此主题。Cloudflare 与传统 CDN 的工作方式不同,因此本主题不适合讨论 Cloudflare。

据报告可用的其他 CDN 包括:

43 个赞