此配置应该可以结合使用 Route 53 的别名功能、S3 重定向和 CloudFront 行为。
1 配置具有多个来源和路径匹配行为的 CloudFront 分配
看起来您有三个不同的内容来源,“网络服务器”内容、“静态”内容和“媒体”内容。 CloudFront 应该能够为同一域名后面的每个来源提供内容。要进行此设置,您需要
在您的 CloudFront 分配中配置三个不同的源。
这是创建 CloudFront 分配的指南,我在下面提供了概述:
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreatingDownloadDistributions.html
- 在创建分发时将“网络服务器”设置为源
- 创建分发后,导航到分发设置并单击源选项卡
- 再添加两个来源,一个用于静态,一个用于媒体
- 点击行为标签
- 使用 /static/* 的路径模式创建一个新行为,并选择您刚刚创建的“静态”内容来源。重复这些步骤,为 /media/* 路径创建第二个行为,并将此行为指向“媒体”内容源。与这两种补丁模式不匹配的任何内容都将退回到默认行为,并将提供来自您的“网络服务器”来源的内容。
2 配置 CloudFront 以使用您的域名
当您创建 CloudFront 分配时,您会在“cloudfront.net”域下获得一个分配名称。为了让 CloudFront 与您自己的域名结合使用,您需要配置一个 CNAME,将“www.mydomain.com”域指向 CloudFront 分配 DNS 名称。然后,您需要将 CloudFront 分配配置为在看到对 www.mydomain.com 域的请求时做出响应。
文档:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html
- 编辑您的 CloudFront 分配,并导航到分配详细信息的“常规”选项卡。单击编辑按钮并将“www.mydomain.com”添加到备用名称列表中
- 在 Route 53 的“mydomain.com”托管区域中,创建一个新的 RRSet 作为 CNAME 类型,将名称设置为 www.mydomain.com,并将值配置为分配给 CloudFront 的“域名”您已经创建的发行版。您可以在分发详细信息的常规选项卡中找到分发“域名”。
此时,当您浏览 www.mydomain.com 时,您将被路由到最近的 CloudFront 边缘站点,并且根据请求的路径,返回的内容将来自三个不同的内容来源之一。但您也希望 'mydomain.com' 的行为方式相同。您可以通过使用 Route 53 别名和 S3 重定向创建 www-lyzer 来实现此目的。
3 使用 Route 53 别名和 S3 重定向在“mydomain.com”的区域顶点创建 www-a-lizer
这篇博文很好地介绍了 Route 53 别名和 S3 重定向,对于这个示例,我们需要在以下步骤中进行一些调整:
http://aws.typepad.com/aws/2012/12/root-domain-website-hosting-for-amazon-s3.html
- 使用 S3 控制台创建一个名为“mydomain.com”的新 S3 存储桶
- 配置“mydomain.com”存储桶以将所有请求重定向到“www.mydomain.com”。请注意,因为我们需要重定向到 S3 存储桶以外的东西,所以我们必须使用重定向规则而不是“重定向所有请求”选项。因此,在您的存储桶属性中,单击“启用网站托管”单选按钮。展开“编辑重定向规则”并添加以下规则配置:
<RoutingRules>
<RoutingRule>
<Redirect>
<HostName>www.mydomain.com</HostName>
</Redirect>
</RoutingRule>
</RoutingRules>
- 使用 Route 53 控制台,打开您的“mydomain.com”托管区域并创建一个新的 RRSet,如下所示:
名称:'mydomain.com'
类型:'A'
别名:“是”
- 在值字段中,您应该会看到刚刚创建的存储桶。选择“mydomain.com”存储桶。
回复评论:
第三步的目标是确保对“mydomain.com”的请求通过 CloudFront 分配进行定向。理想情况下,我们可以按照步骤 2 中的说明使用 CNAME,但是不能在区域顶点使用 CNAME。就目前而言,这意味着我们必须跳过一些障碍。
可以在 S3 中使用扩展的重定向规则,根据路径匹配重定向到不同的来源。这意味着您的所有用户请求都会在重定向到 CDN 或直接到您的源之前到达 S3。这会给每个请求增加一点延迟。要从 CDN 获得最佳性能,您将希望您的用户尽可能直接地连接(最好不要重定向)。上面提出的解决方案基于这样一个事实,即重定向只发生一次(当用户请求“mydomain.com”时),所有后续用户请求都直接转到“www.mydomain.com”。
关于通过 CloudFront 的 POST 和身份验证。 CloudFront 会将 cookie 和查询字符串传回给源,如果它配置为这样做的话。如果您的身份验证系统可以利用这些方法中的任何一种进行令牌传递,您应该能够通过 CloudFront 传递您的身份验证请求。目前,CloudFront 不会将 POST 请求传递到源。如果您使用客户端脚本进行 POST,那么您可以使用不同的 DNS 名称围绕 CloudFront 进行 POST。例如'post.www.mydomain.com'。