使用 Amazon CloudFront Origin Shield - Amazon CloudFront
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Amazon CloudFront Origin Shield

CloudFront Origin Shield 是 CloudFront 缓存基础设施中的一个附加层,有助于最大限度地减少源的负载、提高其可用性并降低其运营成本。借助 CloudFront Origin Shield,您可以获得以下优势:

更好的缓存命中率

Origin Shield 可以帮助提高 CloudFront 分配的缓存命中率,因为它在源之前提供了额外的缓存层。当您使用 Origin Shield 时,从 CloudFront 缓存层到源的所有请求都会通过 Origin Shield,从而增加缓存命中的可能性。CloudFront 可以使用从 Origin Shield 到您的源的单个源请求检索每个对象,CloudFront 缓存的所有其他层(边缘站点和区域边缘缓存)可以从 Origin Shield 中检索对象。

减少源负荷

Origin Shield 可以进一步减少针对同一对象发送到源的同时请求的数量。对不在 Origin Shield 缓存中的内容的请求将与对同一对象的其他请求合并,从而导致发往源的请求只有一个。在源中处理较少的请求可以在高峰负载或意外流量峰值期间保持源的可用性,并且可以降低即时打包、图像转换和数据传出 (DTU) 等方面的成本。

更好的网络性能

当您在与源之间的延迟最短的 AWS 区域中启用 Origin Shield 时,可以获得更好的网络性能。对于 AWS 区域中的源,CloudFront 网络流量始终保留在高吞吐量 CloudFront 网络上,直至您的源。对于 AWS 外部的源,CloudFront 网络流量一直保留在 CloudFront 网络上,直至到达 Origin Shield(它与源之间具有低延迟连接)。

使用 Origin Shield 需要支付额外费用。有关更多信息,请参阅 CloudFront 定价

Origin Shield 的使用案例

CloudFront Origin Shield 适用于许多使用案例,包括以下情况:

  • 分布在不同地理区域的查看器

  • 为实时流式处理或动态图像处理提供即时打包的源

  • 具有容量或带宽限制的内部源

  • 使用多个内容分发网络 (CDN) 的工作负载

Origin Shield 可能不太适合其他情况,例如通过代理到达源的动态内容、可缓存性低的内容或不经常请求的内容。

以下各节介绍 Origin Shield 在以下使用案例中的优势。

位于不同地理区域的查看器

通过 Amazon CloudFront,您本质上可以减少源上的负载,因为 CloudFront 可以从缓存提供服务的请求不会转到源。除了 CloudFront 的全球边缘站点网络外,区域边缘缓存还作为中间层缓存层,为附近地理区域中的查看器提供缓存命中并合并源请求。查看器请求首先路由到附近的 CloudFront 边缘站点,如果对象未在该站点缓存,则请求将发送到区域边缘缓存。

当查看器位于不同的地理区域时,请求可以通过不同的区域边缘缓存进行路由,其中每个缓存都可以向您的源发送对相同内容的请求。但使用 Origin Shield,您可以在区域边缘缓存和源之间获得额外的缓存层。来自所有区域边缘缓存的所有请求都经过 Origin Shield,从而进一步减少源上的负载。下面的示意图对此进行说明。在下图中,源是 AWS Elemental MediaPackage。

不使用 Origin Shield

如果没有 Origin Shield,源可能会收到针对相同内容的重复请求,如下图所示。


                    如果没有 CloudFront Origin Shield,源可能会收到重复的请求。

使用 Origin Shield

使用 Origin Shield 有助于减少源上的载荷,如下图所示。


                    使用 CloudFront Origin Shield,源可能接收更少的重复请求。

多个 CDN

要提供实时视频活动或热门点播内容,您可以使用多个内容分发网络 (CDN)。使用多个 CDN 可以提供某些优势,但这也意味着源可能会收到许多对同一内容的重复请求,每个请求来自不同的 CDN 或同一 CDN 内的不同位置。这些冗余请求可能会对源的可用性产生不利影响,或导致进程(如即时打包或数据传出 (DTU) 到 Internet)的额外运营成本。

当您将 Origin Shield 与将 CloudFront 分配用作其他 CDN 的源相结合时,可以获得以下好处:

  • 减少源收到的冗余请求数量,这有助于减少使用多个 CDN 的负面影响。

  • 跨 CDN 的通用缓存密钥,以及面向源的功能的集中管理。

  • 提高了网络性能。来自其他 CDN 的网络流量在附近的 CloudFront 边缘站点终止,这可能会提供来自本地缓存的命中。如果请求的对象不在边缘站点缓存中,则对源的请求将一直保留在 CloudFront 网络上直至 Origin Shield,从而为源提供高吞吐量和低延迟。如果请求的对象位于 Origin Shield 的缓存中,则完全避免对源的请求。

重要

如果您有兴趣在多 CDN 架构中使用 Origin Shield,并且享有折扣价格,请联系我们或您的 AWS 销售代表以获取更多信息。可能收取额外费用。

下图显示了当您使用多个 CDN 提供流行的实时视频活动时,此配置如何帮助最大限度地减少源上的负载。在下图中,源是 AWS Elemental MediaPackage。

不使用 Origin Shield(多个 CDN)

如果不使用 Origin Shield,源可能会收到针对相同内容的重复请求,每个请求来自不同的 CDN,如下图所示。


                    如果不使用 CloudFront Origin Shield,源可能收到许多重复请求,每个请求来自不同的 CDN。

使用 Origin Shield(多个 CDN)

使用 Origin Shield(将 CloudFront 作为其他 CDN 的源)有助于减少源上的载荷,如下图所示。


                    使用 CloudFront Origin Shield 并将 CloudFront 作为其他 CDN 的源时,源收到的重复请求较少。

为 Origin Shield 选择 AWS 区域

在 CloudFront 具有区域性边缘缓存的 AWS 区域中,Amazon CloudFront 提供 Origin Shield。启用 Origin Shield 后,可以为 Origin Shield 选择 AWS 区域。您应该选择与源之间具有最低延迟的 AWS 区域。您可将 Origin Shield 用于 AWS 区域中的源,也可以用于 AWS 之外的源。

对于 AWS 区域中的源

如果您的源位于 AWS 区域,请首先确定您的源是否位于 CloudFront 提供 Origin Shield 的区域。CloudFront 在以下 AWS 区域提供 Origin Shield。

  • 美国东部(俄亥俄)– (us-east-2)

  • 美国东部(弗吉尼亚北部)– us-east-1

  • 美国西部(俄勒冈)– us-west-2

  • 亚太地区(孟买)– (ap-south-1)

  • 亚太地区(首尔)– (ap-northeast-2)

  • 亚太地区(新加坡)– (ap-southeast-1)

  • 亚太地区(悉尼)– ap-southeast-2

  • 亚太地区(东京)– (ap-northeast-1)

  • 欧洲(法兰克福)– eu-central-1

  • 欧洲(爱尔兰)– eu-west-1

  • 欧洲(伦敦)– eu-west-2

  • 南美洲(圣保罗)– (sa-east-1)

如果您的源位于 CloudFront 提供 Origin Shield 的 AWS 区域

如果源位于 CloudFront 提供 Origin Shield 的 AWS 区域中(请参阅前面的列表),请在与源相同的区域中启用 Origin Shield。

如果您的源不在 CloudFront 提供 Origin Shield 的 AWS 区域

如果源不在 CloudFront 提供 Origin Shield 的 AWS 区域中,请参阅下表以确定要在哪个区域中启用 Origin Shield。

如果源位于...

启用 Origin Shield 的位置...

美国西部(加利福尼亚北部)– us-west-1

美国西部(俄勒冈)– us-west-2

非洲(开普敦)– af-south-1

欧洲(爱尔兰)– eu-west-1

亚太地区(香港)– ap-east-1

亚太地区(新加坡)– (ap-southeast-1)

加拿大(中部)– ca-central-1

美国东部(弗吉尼亚北部)– us-east-1

欧洲(米兰)– eu-south-1

欧洲(法兰克福)– eu-central-1

欧洲(巴黎)– eu-west-3

欧洲(伦敦)– eu-west-2

欧洲(斯德哥尔摩)– eu-north-1

欧洲(伦敦)– eu-west-2

中东(巴林)– me-south-1

亚太地区(孟买)– (ap-south-1)

对于 AWS 之外的源

您可以将 Origin Shield 与本地或不在 AWS 区域中的源结合使用。在这种情况下,请在与源之间的延迟最低的 AWS 区域中启用 Origin Shield。如果您不确定哪个 AWS 区域与源之间的延迟最低,可以使用以下建议来帮助做出决定。

  • 您可以参阅上表,根据源的地理位置,了解哪个 AWS 区域可能与源之间具有最低延迟的近似情况。

  • 您可以在地理位置靠近源的几个不同 AWS 区域中启动 Amazon EC2 实例,并使用 ping 运行一些测试来测量这些区域与源之间的典型网络延迟。

启用 Origin Shield

您可以启用 Origin Shield 来提高缓存命中率,减少源上的负载,并帮助提高性能。要启用 Origin Shield,请更改 CloudFront 分配中的源设置。Origin Shield 是源的一个属性。对于 CloudFront 分配中的每个源,您可以在为该源提供最佳性能的任何 AWS 区域中单独启用 Origin Shield。

您可以使用 CloudFront 控制台、AWS CloudFormation 或 CloudFront API 启用 Origin Shield。

为现有源启用 Origin Shield(控制台)

  1. 登录 AWS 管理控制台并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/home

  2. 选择具有要更新的源的分配。

  3. 选择 Origins and Origin Groups (源和源组) 选项卡。

  4. 选择要更新的源,然后选择编辑

  5. 对于启用 Origin Shield ,选择

  6. 对于 Origin Shield 区域,选择要在其中启用 Origin Shield 的 AWS 区域。有关选择区域的帮助,请参阅为 Origin Shield 选择 AWS 区域

  7. 在页面底部选择是,编辑

当您的分配状态为已部署时,Origin Shield 已准备就绪。这需要几分钟。

为新源启用 Origin Shield(控制台)

  1. 登录 AWS 管理控制台并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/home

  2. 要在现有分配中创建新源,请执行以下操作:

    1. 选择要在其中创建源的分配。

    2. 选择创建源,然后继续执行步骤 3。

    要在新分配中创建新源,请执行以下操作:

    1. 选择 Create Distribution

    2. Web 部分中,选择入门。在源设置部分,完成以下步骤,从步骤 3 开始。

  3. 对于启用 Origin Shield ,选择

  4. 对于 Origin Shield 区域,选择要在其中启用 Origin Shield 的 AWS 区域。有关选择区域的帮助,请参阅为 Origin Shield 选择 AWS 区域

    如果要创建新的分配,请使用页面上的其他设置继续配置分配。有关更多信息,请参阅 您创建或更新分配时指定的值

  5. 请确保通过选择创建(对于现有分配中的新源)或创建分配(对于新分配中的新源)来保存更改。

当您的分配状态为已部署时,Origin Shield 已准备就绪。这需要几分钟。

要对 AWS CloudFormation 启用 Origin Shield,请使用 AWS::CloudFront::Distribution 资源的 Origin 属性类型中的 OriginShield 属性。您可以将 OriginShield 属性添加到现有 Origin 属性,也可以在创建新的 Origin 属性时将其包括在内。

以下示例以 YAML 格式显示在美国西部(俄勒冈)区域 (us-west-2) 中启用 OriginShield 的语法。有关选择区域的帮助,请参阅为 Origin Shield 选择 AWS 区域。此示例仅显示 Origin 属性类型,而不显示整个 AWS::CloudFront::Distribution 资源。

Origins: - DomainName: 3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com Id: Example-EMP-3ae97e9482b0d011 OriginShield: Enabled: true OriginShieldRegion: us-west-2 CustomOriginConfig: OriginProtocolPolicy: match-viewer OriginSSLProtocols: TLSv1

有关更多信息,请参阅《AWS CloudFormation 用户指南》的资源和属性参考部分中的 AWS::CloudFront::Distribution 源

要使用 AWS 软件开发工具包或 AWS 命令行界面 (AWS CLI) 对 CloudFront API 启用 Origin Shield,请使用 OriginShield 类型。您可以在 DistributionConfigOrigin 中指定 OriginShield。有关 OriginShield 类型的信息,请参阅《Amazon CloudFront API 参考》中的以下信息。

使用这些类型和操作的具体语法因开发工具包、CLI 或 API 客户端而异。有关更多信息,请参阅开发工具包、CLI 或客户端的参考文档。

估算 Origin Shield 成本

您可以根据作为增量层转到 Origin Shield 的请求数量来计算 Origin Shield 的费用。

对于通过代理到达源的动态(不可缓存)请求,Origin Shield 始终是增量层。动态请求使用以下 HTTP 方法:PUTPOSTPATCHDELETE

要针对动态请求估计 Origin Shield 的费用,请使用以下公式:

动态请求总数 x 每 10,000 个请求的 Origin Shield 费用 / 10,000

对于可缓存请求(HTTP 方法 GETHEADOPTIONS),Origin Shield 有时是一个增量层。启用 Origin Shield 后,可以为 Origin Shield 选择 AWS 区域。对于自然转到与 Origin Shield 位于相同区域中的区域边缘缓存的请求,Origin Shield 不是增量层。您不会为这些请求累积 Origin Shield 费用。对于转到与 Origin Shield 位于不同区域中的区域边缘缓存,然后转到 Origin Shield 的请求,Origin Shield 为增量层。您确实需要为这些请求累积 Origin Shield 费用。

要针对可缓存的请求估计 Origin Shield 的费用,请使用以下公式:

可缓存请求总数 x(1 - 缓存命中率)x 从不同区域的区域边缘缓存转到 Origin Shield 的请求的百分比 x 每 10,000 个请求的 Origin Shield 费用 / 10,000

有关 Origin Shield 每 10,000 个请求收取的费用的更多信息,请参阅 CloudFront 定价

Origin Shield 高可用性

Origin Shield 利用 Amazon CloudFront 的区域边缘缓存。其中每个边缘缓存都在一个 AWS 区域中使用至少三个可用区以及自动扩展 Amazon EC2 实例队列而构建。如果 Origin Shield 主位置不可用,则从 CloudFront 位置到 Origin Shield 的连接还会对每个请求使用活动错误跟踪,从而将请求自动路由到 Origin Shield 备用位置。

Origin Shield 如何与其他 CloudFront 功能进行交互

以下各节介绍 Origin Shield 如何与其他 CloudFront 功能进行交互。

Origin Shield 和 CloudFront 日志记录

要查看 Origin Shield 何时处理了请求,必须启用以下选项之一:

来自 Origin Shield 的缓存命中在 CloudFront 日志的 x-edge-detailed-result-type 字段中显示为 OriginShieldHit。Origin Shield 利用 Amazon CloudFront 的区域边缘缓存。如果请求从 CloudFront 边缘站点路由到充当 Origin Shield 的区域边缘缓存,则在日志中将其报告为 Hit,而不是报告为 OriginShieldHit

Origin Shield 和源组

Origin Shield 与 CloudFront 源组兼容。由于 Origin Shield 是源的一个属性,因此,对于每个源,请求始终会通过 Origin Shield,即使源是源组的一部分也是如此。对于给定的请求,CloudFront 通过主源的 Origin Shield 将请求路由到源组中的主源。如果该请求失败(根据源组故障转移标准),CloudFront 通过辅助源的 Origin Shield 将请求路由到辅助源。

Origin Shield 和 Lambda@Edge

Origin Shield 不会影响 Lambda@Edge 函数的功能,但会影响运行这些函数的 AWS 区域。当您将 Origin Shield 与 Lambda@Edge 一起使用时,面向源的触发器(源请求和源响应)会在启用 Origin Shield 的 AWS 区域中运行。面向查看器的触发器不受影响。