

# 使用 Amazon CloudFront Origin Shield
<a name="origin-shield"></a>

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

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

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

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

使用 Origin Shield 需要支付额外费用。有关更多信息，请参阅 [CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。

**注意**  
gRPC 请求不支持源护盾。如果支持 gRPC 的分配启用了源护盾，则 gRPC 请求可继续正常运行。但是，请求通过代理直接传输到 gRPC 源，而不通过源护盾。有关更多信息，请参阅 [将 gRPC 与 CloudFront 分配结合使用](distribution-using-grpc.md)。

**Topics**
+ [Origin Shield 的使用案例](#origin-shield-use-cases)
+ [为 Origin Shield 选择 AWS 区域](#choose-origin-shield-region)
+ [启用 Origin Shield](#enable-origin-shield)
+ [估算 Origin Shield 成本](#origin-shield-costs)
+ [Origin Shield 高可用性](#origin-shield-high-availability)
+ [Origin Shield 如何与其他 CloudFront 功能进行交互](#origin-shield-and-other-features)

## Origin Shield 的使用案例
<a name="origin-shield-use-cases"></a>

CloudFront Origin Shield 适用于许多使用案例，包括以下情况：
+ 分布在不同地理区域的查看器
+ 为实时流式处理或动态图像处理提供即时打包的源
+ 具有容量或带宽限制的内部源
+ 使用多个内容分发网络 (CDN) 的工作负载

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

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

**Topics**
+ [位于不同地理区域的查看器](#os-use-cases-global-viewers)
+ [多个 CDN](#os-use-cases-multi-cdn)

### 位于不同地理区域的查看器
<a name="os-use-cases-global-viewers"></a>

通过 Amazon CloudFront，您本质上可以减少源上的负载，因为 CloudFront 可以从缓存提供服务的请求不会转到源。除了 CloudFront 的[全球边缘站点网络](https://aws.amazon.com/cloudfront/features/#Amazon_CloudFront_Infrastructure)外，[区域边缘缓存](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)还作为中间层缓存层，为附近地理区域中的查看器提供缓存命中并合并源请求。查看器请求首先路由到附近的 CloudFront 边缘站点，如果对象未在该站点缓存，则请求将发送到区域边缘缓存。

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

**不使用 Origin Shield**

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

![\[如果没有 CloudFront Origin Shield，源可能会收到重复的请求。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/origin-shield-without.png)


**使用 Origin Shield**

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

![\[使用 CloudFront Origin Shield，源可能接收更少的重复请求。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/origin-shield-with.png)


### 多个 CDN
<a name="os-use-cases-multi-cdn"></a>

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

当您将 Origin Shield 与将 CloudFront 分配用作其他 CDN 的源相结合时，可以获得以下好处：
+ 减少源收到的冗余请求数量，这有助于减少使用多个 CDN 的负面影响。
+ 跨 CDN 的通用[缓存密钥](controlling-the-cache-key.md)，以及面向源的功能的集中管理。
+ 提高了网络性能。来自其他 CDN 的网络流量在附近的 CloudFront 边缘站点终止，这可能会提供来自本地缓存的命中。如果请求的对象不在边缘站点缓存中，则对源的请求将一直保留在 CloudFront 网络上直至 Origin Shield，从而为源提供高吞吐量和低延迟。如果请求的对象位于 Origin Shield 的缓存中，则完全避免对源的请求。

**重要**  
如果您有兴趣在多 CDN 架构中使用 Origin Shield，并且享有折扣价格，请[联系我们](https://aws.amazon.com/contact-us/)或您的 AWS 销售代表以获取更多信息。可能收取额外费用。

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

**不使用 Origin Shield（多个 CDN）**

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

![\[该图显示源如何接收重复请求，每个请求来自不同的 CDN。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/origin-shield-without-multi-cdn.png)


**使用 Origin Shield（多个 CDN）**

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

![\[该图显示 CloudFront Origin Shield 收到较少的重复请求。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/origin-shield-with-multi-cdn.png)


## 为 Origin Shield 选择 AWS 区域
<a name="choose-origin-shield-region"></a>

在 CloudFront 具有[区域性边缘缓存](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)的 AWS 区域中，Amazon CloudFront 提供 Origin Shield。启用 Origin Shield 后，可以为 Origin Shield 选择 AWS 区域。您应该选择与源之间具有最低延迟的 AWS 区域。您可以将 Origin Shield 与位于 AWS 区域中的源和不在 AWS 中的源结合使用。

### 对于 AWS 区域中的源
<a name="choose-origin-shield-region-inside-aws"></a>

如果您的源位于 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`)
+ 中东（阿联酋）– `me-central-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
<a name="choose-origin-shield-region-outside-aws"></a>

您可以将 Origin Shield 与本地或不在 AWS 区域中的源结合使用。在这种情况下，请在与源之间的延迟最低的 AWS 区域中启用 Origin Shield。如果您不确定哪个 AWS 区域与源之间的延迟最低，您可以使用以下建议来帮助做出决定。
+ 您可以参阅上表，根据源的地理位置，了解哪个 AWS 区域可能与源之间具有最低延迟的近似情况。
+ 您可以在地理位置靠近源的几个不同 AWS 区域中启动 Amazon EC2 实例，并使用 `ping` 运行一些测试来测量这些区域与源之间的典型网络延迟。

## 启用 Origin Shield
<a name="enable-origin-shield"></a>

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

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

------
#### [ Console ]

**为现有源启用 Origin Shield（控制台）**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

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

1. 选择**源**选项卡。

1. 选择要更新的源，然后选择**编辑**。

1. 对于**启用 Origin Shield **，选择**是**。

1. 对于 **Origin Shield 区域**，选择要在其中启用 Origin Shield 的 AWS 区域。有关选择区域的帮助，请参阅[为 Origin Shield 选择 AWS 区域](#choose-origin-shield-region)。

1. 选择**保存更改**。

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

**为新源启用 Origin Shield（控制台）**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 要在现有分配中创建新源，请执行以下操作：

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

   1. 选择**创建源**，然后继续执行步骤 3。

   要在新的标准分配中创建新源，请执行以下操作：

   1. 按照以下步骤，在控制台中创建标准分配。有关更多信息，请参阅 [在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

   1. 在**设置**部分，选择**自定义源设置**。继续执行步骤 3。

1. 对于**启用 Origin Shield **，选择**是**。

1. 对于 **Origin Shield 区域**，选择要在其中启用 Origin Shield 的 AWS 区域。有关选择区域的帮助，请参阅[为 Origin Shield 选择 AWS 区域](#choose-origin-shield-region)。

1. 按照控制台中的步骤完成源或分配创建。

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

------
#### [ CloudFormation ]

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

以下示例以 YAML 格式显示在美国西部（俄勒冈州）区域 (`OriginShield`) 中启用 `us-west-2` 的语法。有关选择区域的帮助，请参阅[为 Origin Shield 选择 AWS 区域](#choose-origin-shield-region)。此示例仅显示 `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 源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-origin.html)。

------
#### [ API ]

要使用 AWS 开发工具包或 AWS Command Line Interface (AWS CLI) 对 CloudFront API 启用 Origin Shield，请使用 `OriginShield` 类型。您可以在 `OriginShield` 的 `Origin` 中指定 `DistributionConfig`。有关 `OriginShield` 类型的信息，请参阅《Amazon CloudFront API 参考》**中的以下信息。
+ [OriginShield](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_OriginShield.html)（类型）
+ [Origin](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_Origin.html)（类型）
+ [DistributionConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DistributionConfig.html)（类型）
+ [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)（操作）
+ [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)（操作）

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

------

## 估算 Origin Shield 成本
<a name="origin-shield-costs"></a>

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

 对于通过代理到达源的动态（不可缓存）请求，Origin Shield 始终是增量层。动态请求使用 HTTP 方法：`PUT`、`POST`、`PATCH` 和 `DELETE`。

生存时间（TTL）设置小于 3600 秒的 `GET` 和 `HEAD` 请求被视为动态请求。此外，已禁用缓存的 `GET` 和 `HEAD` 请求也被视为动态请求。

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

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

对于采用 HTTP 方法 `GET`、`HEAD` 和 `OPTIONS` 的非动态请求，Origin Shield 有时是一个增量层。启用 Origin Shield 后，可以为 Origin Shield 选择 AWS 区域。对于自然转到与 Origin Shield 位于相同区域中的[区域边缘缓存](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)的请求，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 定价](https://aws.amazon.com/cloudfront/pricing/)。

## Origin Shield 高可用性
<a name="origin-shield-high-availability"></a>

Origin Shield 利用 CloudFront [区域边缘缓存](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)功能。其中每个边缘缓存都在一个 AWS 区域中使用至少三个[可用区](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)以及自动伸缩 Amazon EC2 实例队列而构建。如果 Origin Shield 主位置不可用，则从 CloudFront 位置到 Origin Shield 的连接还会对每个请求使用活动错误跟踪，从而将请求自动路由到 Origin Shield 备用位置。

## Origin Shield 如何与其他 CloudFront 功能进行交互
<a name="origin-shield-and-other-features"></a>

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

### Origin Shield 和 CloudFront 日志记录
<a name="origin-shield-logging"></a>

要查看 Origin Shield 何时处理了请求，必须启用以下选项之一：
+ [CloudFront 标准日志（访问日志）](AccessLogs.md)。免费提供标准日志。
+ [CloudFront 实时访问日志](real-time-logs.md)。使用实时访问日志会产生额外费用。请参阅 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。

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

### Origin Shield 和源组
<a name="origin-shield-and-origin-group"></a>

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

### Origin Shield 和 Lambda@Edge
<a name="origin-shield-and-lambda-at-edge"></a>

Origin Shield 不会影响 [Lambda@Edge](lambda-at-the-edge.md) 函数的功能，但会影响运行这些函数的 AWS 区域。

当您将 Origin Shield 与 Lambda@Edge 一起使用时，[面向源的触发器](lambda-cloudfront-trigger-events.md)（源请求和源响应）会在启用 Origin Shield 的 AWS 区域中运行。如果 Origin Shield 主位置不可用并且 CloudFront 将请求路由到 Origin Shield 备用位置，则面向源的 Lambda@Edge 触发器也将转为使用备用 Origin Shield 位置。

面向查看器的触发器不受影响。