AWS CloudFront分布在与Web服务器相同的域下

and*_*rei 5 amazon-ec2 amazon-web-services amazon-cloudfront amazon-route53

目前我在mydomain.com上有我的网络服务器,在static.mydomain.com和media.mydomain.com有两个CDN.

是否有可能在mydomain.com下拥有所有权限?例如

mydomain.com - 网络服务器

mydomain.com/static - 静态CDN

mydomain.com/media - 媒体CDN

Wad*_*nko 13

使用Route 53的别名功能,S3重定向和CloudFront行为,可以实现此配置.

1 配置具有多个源和路径匹配行为的CloudFront分配

看起来您有三种不同的内容来源,即"网络服务器"内容,"静态"内容和"媒体"内容.CloudFront应该能够为同一域名后面的每个来源提供内容.要进行此设置,您需要在CloudFront分配中配置三个不同的来源.以下是创建CloudFront分配的指南,我在下面提供了一个概述:http: //docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreatingDownloadDistributions.html

  • 在创建分发时将"webserver"设置为原点
  • 创建分发后,导航到分发设置并单击原始选项卡
  • 再添加两个来源,一个用于静态,一个用于媒体
  • 单击"行为"选项卡
  • 创建路径模式为/ static/*的新行为,并选择刚刚创建的"静态"内容源.重复这些步骤为/ media/*路径创建第二个行为,并将此行为指向"media"内容源.任何与这两种补丁模式不匹配的内容都将回退到默认行为,并将从"网络服务器"来源提供内容.

2 配置CloudFront以使用您的域名

创建CloudFront分配时,将在"cloudfront.net"域下发布分发名称.为了使CloudFront与您自己的域名一起使用,您需要配置一个将"www.mydomain.com"域指向CloudFront分配DNS名称的CNAME.然后,您需要配置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

这篇博文提供了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>
Run Code Online (Sandbox Code Playgroud)
  • 使用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和查询字符串传递回原点.如果您的auth系统可以利用这些方法中的任何一种进行令牌传递,那么您应该能够通过CloudFront传递您的身份验证请求.目前,CloudFront不会将POST请求传递给源.如果您使用客户端脚本进行POST,则可以使用其他DNS名称在CloudFront周围进行POST.例如'post.www.mydomain.com'.