为您的 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 个赞
Full site CDN acceleration for Discourse
Azure Backup/CDN Integration
Downloading remote images disabled due to disk space
How do I change the legacy CDN URLs of images in posts?
Add a new site (android) 'was not found'
CloudFront not caching static files
How to enable AWS CDN to accelerate the discourse service
Cloudfront cdn with discourse?
How to add AWS Cloudfront as a Discourse CDN
How to solve super slow loading time for site?
Varnish config for discourse
S3 image bandwidth costs are getting annoying
Discourse load balancer encounters problems, hoping to help
Is Hetzner Object Storage and Bunny CDN Supported?
I can't login to admin after backup due to Cloudflare
How to install discourse without ssl?
How to add AWS Cloudfront as a Discourse CDN
Conserving unicorns by serving images with nginx?
Is Hetzner Object Storage and Bunny CDN Supported?
Optimizing Site For Speed - How To Improve?
Latest commits in v3.3.0.beta3-dev seems to break Discourse
How to make Discourse faster for image-heavy communities?
Using Discourse with Cloudflare: Best Practices
Minimum server size based on backup?
Understanding Uploads, Images, and Attachments
Uploads Subdomain For Cloudflare
Discourse & Cloudflare
Mobile app URL issues
Forum does not work
Should I load third-party libraries from vendor or cdn?
Forum not working after configuring CDN (ERR_CERT_COMMON_NAME_INVALID)
Blank login and signup page
My discourse speed is very slow
MKJ's Opinionated Discourse Deployment Configuration
How might we better structure #howto?
Change image folder to symlinked folder