Discourse 全站 CDN 加速

I have a question concerning CDN technology.

Am I right that cdn can only cache the files in my site and can’t cache hotlinked files from another site?

I store catalogue files (mps and pictures) on another server and hotlink them on my Discourse site. Am I right that such files won’t be cached by cdn? Is there a way to cache the hotlinked files too?

Unless you tell discourse not to, it will pull those remote images to its own image store. The below assumes you turned that off.

You should put that site behind CDN and then share the CDN url to discourse.

If you put a CDN in front of your image site but share the origin url to discourse, You can use a built in feature to replace the origin url with the CDN url .

2 个赞

Am I right, that if I activate the CDN feature in Discourse and switch off saving the origin to Discourse, the cdn service will cache these external files and Discourse will replace all the links to files hotlinked from another site?

I doubt that can caches external files hotlinked from other sites. Can anybody approve it?

FYI - I’ve posted a new thread on how to setup full site CDN acceleration (and SSL termination) using AWS Cloudfront here (link below). There be dragons here - so tread lightly.

1 个赞

当出现错误 Reason: CORS header ‘Access-Control-Allow-Origin’ missing 时,是否仍然需要它?

我在 Github 上找不到任何使用该变量的地方:


编辑:设置注释仍然说需要它,添加之后确实有效。所以我就接受了 :slight_smile:

在2023年,以下四条规则是否仍然需要严格遵守?例如,如果我使用Akamai,它被设计用来加速主域名及其CDN。有人能提供以下规则的精简配置吗?例如,消息总线长轮询是否仍需要请求源站?这些设置应该放在哪里?长轮询的基础URL似乎已从管理仪表板中移除?

2 个赞

有一些高级选项允许您从不同的域提供消息总线请求。不过,这非常复杂。

1 个赞

因此,“长轮询基 URL”必须通过 Rails 控制台进行设置。因为它已从管理员仪表板中移除。如果该设置仍然需要使网站在完整站点 CDN 模式下正常运行,我一定错过了之前发布的任何原因。

同样,“DISCOURSE_ENABLE_CORS: true”必须在 app.yml 中设置。

您应该通过 app.yml 中的环境变量 (DISCOURSE_LONG_POLLING_BASE_URL) 来设置它。它被隐藏起来是因为很少有人需要设置它,并且假设如果您这样做,您知道自己在做什么。

1 个赞

谢谢你,@pfaffman!我早就该知道所有这些大写的变量都应该放在 app.yml 中。
那么,message-bus 的用例将在什么时候生效?例如,回复帖子导致通知等?我将进行用例测试,以确保在未设置 DISCOURSE_LONG_POLLING_BASE_URL 的情况下,我的站点上的 message-bus 是否按预期工作。

您好,

“长轮询基础 URL”是否已从管理员仪表板中移除?或者可以通过 Rails 控制台进行此设置吗?

long_polling_base_url 是一个隐藏的站点设置,但如果你不在 app.yml 中使用环境变量,则可以从 rails 控制台进行设置:

3 个赞

此列表无疑为 Discourse 提供了更多见解。
我已经设置了 CDN 与我的网站,它已到达边缘缓存,但尚未遇到其响应标头中的消息总线问题,但仍然感觉不牢固。也没有设置 CORS 设置。

Cache-Control: must-revalidate, private, max-age=0

您好,

我在另一个帖子 Full Site CDN Using AWS CloudFront - #2 by Hyan 中发布了我的问题。我做了同样的配置,并保持 #DISCOURSE_CDN_URL: https://discourse-cdn.example.com 不变。我能将其设置为与网站相同的 URL 吗?例如,http://forum.example.com。否则,资产 URL 将是相对路径,没有域名。

如果 @sam@pfaffman 能给点提示,将不胜感激。

我不推荐使用 Cloudflare 作为 CDN。有些人会使用。也许他们能提供帮助。

编辑:哦,抱歉。这是“全站 CDN…”也许我不应该在这里贡献。

不,我使用的是 Akamai CDN,它支持缓存动态内容。
从这个帖子来看,我应该将 DISCOURSE_CDN_URL 设置为非完整站点 CDN 的设置方式,即使 URL 与网站 URL 相同。我不确定设置它是否会导致我的站点损坏和其他不可逆转的后果,最终我不得不从头开始重新安装软件。在这个帖子 Full Site CDN Using AWS CloudFront 中,作者没有设置 DISCOURSE_CDN_URL 并保持不变,并且不需要单独的 URL 来服务 message-bus/long-polling。我使用了这个解决方案,到目前为止我的网站运行良好。该解决方案唯一的缺点是页面源代码中有许多相对 URL(没有基本 URL,因为 DISCOURSE_CDN_URL 值为空),这使得它看起来不像一个生产级别的网站。

在我跟进我的问题时,我发现了一篇与我在这篇帖子中询问的内容相似的帖子 CloudFront not caching static files - #4 by Falco
感谢 @Falco 的回答,在这种完整的站点 CDN 设置中,我是否可以将 DISCOURSE_CDN_URL 设置为与 DISCOURSE_HOSTNAME 相同?因为我假设完整的站点 CDN 意味着 CDN 加速主机名的 URL,这使得 DISCOURSE_CDN_URL 与 DISCOURSE_HOSTNAME 相同。但是这里在 meta 上没有关于这方面的像样文档。

嘿,有兔子模板吗?

你不需要为此使用模板,只需将 Bunny 配置为从你的 Discourse 站点拉取,并在 app.yml 中将 DISCOURSE_CDN_URL 设置为 Bunny 提供的 CDN 端点。

1 个赞

我尝试使用 Bunny DNS 和我的 VPS IP 地址将其设置为“CDN 加速”。它确实可以工作,但所有用户都显示相同的 IP 地址。
我找到了配置,它被称为“X-Real-Ip”。