如何将 CDN 与 Play Framework 2.4 资产一起使用?

Posted

技术标签:

【中文标题】如何将 CDN 与 Play Framework 2.4 资产一起使用?【英文标题】:How to use a CDN with Play Framework 2.4 Assets? 【发布时间】:2015-07-06 19:34:52 【问题描述】:

我想使用在通过以下方式获取资产时自动添加到资产 URL 的 CDN URL:

@routes.Assets.versioned("js/whatever.js")

有一个great article on how to setup a CDN URL for Play 2.3,但我在 Play 2.4 中找不到任何示例。有人已经弄清楚了吗?

谢谢!

【问题讨论】:

【参考方案1】:

这实际上取决于您的 Web 基础架构需要什么缓存策略。

谈到 2.3 到 2.4 的过渡,您只需要更改一件事:

使用controller 而不是object

请参阅migration guide 了解原因。

总的来说,Play 框架内置了出色的 caching support。我会使用 versioned 而不是 at 和内置的 Assets 控制器,以通过使用 Etag 包含版本控制支持。值得检查您的 CDN 是否支持 Etag。

您可以使用此基于 HTTP 标头的 Etag 技术和博客文章中基于文件名的技术中的一种或两种。这取决于您的网络基础设施。一个可能比另一个更好。

(该博客中的 PS 代码无法编译,自定义 at 需要三个参数,而对其的调用只有两个参数。)

【讨论】:

谢谢,我当然想使用 Etag 功能,但我还需要支持来自全国各地的用户,如果可能的话,我希望使用 CDN 与 Play 缓存功能相结合。看起来反向代理 CDN 可以做到这一点。 我在 Sky 使用 Akamai CDN 时有某种反向代理,但是他们的 UI/配置很糟糕。我会使用单独的反向代理(例如 nginx)并让 CDN 使用它。 @bjfletcher 我知道这很旧,但我对此有一个基本问题。当我们在 Play 应用程序级别添加 CDN 主机时,每个资产请求都必须先到 Play,然后再到 CDN,对吗?如果是这样,我们如何从 CDN 中受益? 在我们的例子中..我们不使用 UI 的 Play 方式..我们使用 Angular 2 和 webpack。所以我想,我们会尝试为 CDN 配置 webpack。谢谢!

以上是关于如何将 CDN 与 Play Framework 2.4 资产一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 SORM 与 Play Framework 一起使用会导致引发反射异常

Play Framework中,打包时如何排除文件?

休眠 3.2.5 与 Play Framework 1.2.5

如何将外部Javascript文件链接到Play Framework项目中的html文档?

heroku 部署与 play framework 1.2.4 和自己的安全模块

如何在 Play Framework 中进行详细编译?