那么您想使用内容分发网络 (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。
配置将如下所示:

您需要查找三个主要设置:
-
源地址 (origin address),即您的论坛当前所在的 URL,例如
discourse.example.com。这是 CDN 在首次请求时从中获取所有原始内容的位置。 -
CNAME,即您将在 DNS 中设置的 CDN 的“友好”名称,例如
discourse-cdn.example.com -
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
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 包括:
- https://www.keycdn.com/ (CDCK 从早期开始就使用)
- MaxCDN (@sam: 2017 年 1 月称“可靠的 CDN”)
- StackPath (@Victor_Ashiedu 2022 年 6 月)
- Bunny.net (@pfaffman 2023)
- Cloudfront (@pfaffman 认为 CDCK 至少将它们用于 S3 资源)
- gcore.com?(@pfaffman 注册了,但尚未测试 2023 年 4 月)