是否可以通过 CloudFront CDN 进行 AWS 内容路由?

Posted

技术标签:

【中文标题】是否可以通过 CloudFront CDN 进行 AWS 内容路由?【英文标题】:Is it possible to do AWS content routing through the CloudFront CDN? 【发布时间】:2014-07-18 01:55:33 【问题描述】:

我对亚马逊生态圈还很陌生,但我想看看我的想法是否可行,因为我没有找到任何文件来支持或否认它的可能性。

我正在将现有 Web 应用程序的一部分移植到 AWS 生态圈。我正在使用版本控制来支持零停机升级体验。因此,我在 S3 上的目录结构如下所示:

/apps/v1/images

/apps/v1/images/subdir

/apps/v1/javascript

/apps/v1/javascript/subdir

...

/apps/v2/images

/apps/v2/images/subdir

/apps/v2/javascript

/apps/v2/javascript/子目录

...

我有一个 CloudFront CDN 为边缘站点提供这些服务。在 html/JSP 中对这些文件的引用都使用 CDN url。

我的问题是有一堆 javascript 以相对 url "/images/image.png" 的形式引用图像,因为这个路径是由原始 webapp 配置路由的。在服务器端,这可以通过在运行时修改路径来轻松处理,然后通过将 CDN 域和版本添加到 url 来为客户端提供服务。 JS,运行在客户端,没那么简单。

我的问题是,是否可以在 AWS 生态圈中做任何事情来自定义路由信息,以便我可以将“/images”映射到“/apps/v1/images”,然后在适当的时候修改它以映射“/images”到“/apps/v2/images”。我想保留根路由,以便无论 javascript 可能部署到的目录深度如何,“/images/...”相对路径都会成功。我不完全确定这是否可能,但如果有人确切知道,我将不胜感激。

【问题讨论】:

您的相对 url 将如何引用到 S3?相对 url 只在同一台服务器上工作。 S3 图片 url 会有所不同 【参考方案1】:

虽然 cloudfront 或 S3 不会更改您的 URL,但您可以尝试使用 S3 重定向来解决此问题。您可以将未版本化的 URL 重定向到版本化的 URL,当浏览器遵循重定向时,它将从云端获取正确的对象。您的部署脚本可以设置正确的重定向规则。

见:

http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html

Amazon S3 object redirect

【讨论】:

我尝试实现 S3 重定向规则,它们可以通过 Endpoint 直接从 Bucket 提供服务,但无论是 Bucket 还是 Website Endpoint 域用作源,它们都不能在 CloudFront 中工作,除非我遗漏了什么。 没关系,CloudFront 缓存有干扰。我能够在启用静态 Web 托管部分设置路由规则,在该部分中我能够将未版本化的请求转发到文件的版本化实例。请注意,必须使用 S3 存储桶的端点网站地址作为 CloudFront 源,而不是 S3 存储桶本身。

以上是关于是否可以通过 CloudFront CDN 进行 AWS 内容路由?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Cloudfront - 将 CDN 域名传递到源服务器

关于使用AWS的CDN-CloudFront的费用计算及说明

Amazon CloudFront 是不是通过 set-cookie 标头?

AWS Cloudfront 作为具有自定义域的 Heroku 站点的 CDN

从 CDN 传输数据会不会很困难?

Heroku + CDN Cloudfront + 字体 - Firefox 错误