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

时间:2013-03-09 17:55:34

标签: amazon-web-services amazon-ec2 amazon-cloudfront amazon-route53

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

是否有可能在mydomain.com下拥有所有内容? e.g。

mydomain.com - 网络服务器

mydomain.com/static - 静态CDN

mydomain.com/media - 媒体CDN

2 个答案:

答案 0 :(得分:13)

这种配置应该可以使用Route 53的别名功能,S3重定向和CloudFront行为。

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

看起来你有三个不同的内容来源,' webserver'内容,静态'内容和媒体'内容。 CloudFront应该能够为同一域名后面的每个来源提供内容。要设置它,你需要  在CloudFront分配中配置三个不同的来源。 这是创建CloudFront分配的指南,我在下面提供了一个概述:  http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreatingDownloadDistributions.html

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

2 配置CloudFront以使用您的域名

创建CloudFront分配时,您将在' cloudfront.net'下发布分发名称。域。为了让CloudFront与您自己的域名一起使用,您需要配置指向“www.mydomain.com”的CNAME。域到CloudFront分配DNS名称。然后,您需要配置CloudFront分配,以便在看到www.mydomain.com域的请求时进行响应。

文档:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html

  • 修改您的CloudFront分配,然后导航到' General'分发详细信息选项卡。点击修改按钮,然后添加www.mydomain.com'到备选名称列表
  • 在您的&#m; mydomain.com'在Route 53中托管区域,创建一个新的RRSet作为CNAME类型,将名称设置为www.mydomain.com,并将该值配置为'域名'已分配给您已创建的CloudFront分配。您可以找到分发'域名'在分发详细信息的常规选项卡中。

此时,当您浏览到www.mydomain.com时,您将被路由到最近的CloudFront边缘位置,并且返回的内容将来自三个不同内容来源之一,基于路径请求。但是你也喜欢&m; mydomain.com'以同样的方式行事。您可以通过创建具有Route 53别名和S3重定向的www-lyzer来实现此目的。

3 在' mydomain.com'的区域顶点创建一个www-a-lizer。使用Route 53别名和S3重定向

这篇博文提供了53号路线Alias和S3重定向的相当好的演示,对于这个例子,我们需要在下面的步骤中进行一些调整:

http://aws.typepad.com/aws/2012/12/root-domain-website-hosting-for-amazon-s3.html

  • 创建一个名为' mydomain.com的新S3存储桶'使用S3控制台
  • 配置' mydomain.com'将所有请求重定向到www.mydomain.com'。请注意,因为我们需要重定向到S3存储桶以外的其他内容,我们必须使用重定向规则而不是“重定向所有请求”。选项。因此,在您的广告素材属性中,点击“启用网站托管”#39;单选按钮。展开'编辑重定向规则'并添加以下规则配置:
<RoutingRules>
    <RoutingRule>
        <Redirect>
            <HostName>www.mydomain.com</HostName>
        </Redirect>
    </RoutingRule>
</RoutingRules>
  • 使用Route 53控制台,打开您的mydomain.com&#39;托管区域并创建一个新的RRSet,如下所示:
  

姓名:&#39; mydomain.com&#39;

     

输入:&#39; A&#39;

     

别名:&#39;是&#39;

  • 在值字段中,您应该看到刚刚创建的存储桶。选择“mydomain.com”&#39;桶。

对评论的回应:

第三步的目标是确保向'mydomain.com&#39;通过CloudFront分发进行定向。理想情况下,我们可以按照步骤2中的说明使用CNAME,但CNAME不能在区域顶点使用。暂时这意味着我们必须跳过一些箍。

可以在S3中使用扩展重定向规则,根据路径匹配重定向到不同的源。这意味着您的所有用户请求都会在重定向到CDN或直接转到您的源之前命中S3。这会给每个请求增加一点延迟。要从CDN获得最佳性能,您希望用户尽可能直接连接(理想情况下不使用重定向)。上面提出的解决方案依赖于重定向仅发生一次的事实(当用户请求&#m; mydomain.com&#39;),并且所有后续用户请求直接发送到www.mydomain.com&#39; ;

通过CloudFront进行POST和身份验证。如果配置为执行此操作,CloudFront会将cookie和查询字符串传递回原点。如果您的auth系统可以利用这些方法中的任何一种进行令牌传递,那么您应该能够通过CloudFront传递您的身份验证请求。目前,CloudFront不会将POST请求传递给源。如果您使用客户端脚本进行POST,则可以使用其他DNS名称围绕CloudFront进行POST。例如&#39; post.www.mydomain.com&#39 ;.

答案 1 :(得分:2)

简答:不。

答案很长:虽然有可能,但效率极低。您可以设置代理服务器(例如在Nginx中)或为自定义路径规则设置HAProxy,但它会使您的带宽成本加倍(CDN - &gt;代理 - &gt;客户端,而不是CDN - &gt;客户端)。此外,它没有意义,因为首先使用CDN基本上没有任何好处。

这是基于mydomain.com确实提供动态内容的假设。如果没有,您也可以在S3上托管整个域(mydomain.com)。