

# 配置分配
<a name="distribution-working-with"></a>

您需要创建 Amazon CloudFront 分配，以告知 CloudFront 您希望内容从何处传输，并告知有关如何跟踪和管理内容传输的详细信息。

当您创建 CloudFront 分配时，CloudFront 会自动根据内容源类型为您配置大多数分配设置。有关预配置设置的更多详细信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。（可选）您可以选择手动编辑分配设置。有关更多信息，请参阅 [所有分配设置参考](distribution-web-values-specify.md)。

可以配置以下设置：
+ **您的内容源** - CloudFront 从中获取要分配的文件的 Amazon S3 存储桶、AWS Elemental MediaPackage 通道、AWS Elemental MediaStore 容器、Elastic Load Balancing 负载均衡器或 HTTP 服务器。您可以为单个分配指定多达 25 个源的任意组合。
+ **访问** – 您是希望所有人都可以访问这些文件，还是仅限于某些用户。
+ **安全** – 您是否希望启用 AWS WAF 保护并要求用户使用 HTTPS 访问您的内容。对于多租户分配，仅支持 AWS WAF V2 Web 访问控制列表（ACL）。
+ **缓存键** – 要包含在*缓存键* 中的值（如果有）。缓存键唯一标识给定分配的缓存中的每个文件。
+ **源请求设置** – 您是否希望 CloudFront 在它发送到源的请求中包含 HTTP 标头、Cookie 或查询字符串。
+ **地理限制** – 您是否希望 CloudFront 阻止选定国家/地区的用户访问您的内容。
+ **日志**：您希望 CloudFront 创建标准日志，还是创建显示查看器活动的实时访问日志。

有关更多信息，请参阅 [所有分配设置参考](distribution-web-values-specify.md)。

有关您可以为每个 AWS 账户创建的当前最大分配数，请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。对于您可按照分配提供的文件数没有最大值。

您可以使用分配，通过 HTTP 或 HTTPS 提供以下内容：
+ 使用 HTTP 或 HTTPS 的静态和动态下载内容，例如 HTML、CSS、JavaScript 和图像文件。
+ 不同格式的点播视频，例如 Apple HTTP Live Streaming（HLS）和 Microsoft Smooth Streaming。（对于多租户分配，不支持 Smooth Streaming。） 有关更多信息，请参阅 [通过 CloudFront 提供点播视频](on-demand-video.md)。
+ 一个实时事件，例如实时会议或音乐会。对于实时流，您可以使用 CloudFormation 堆栈自动创建分配。有关更多信息，请参阅 [使用 CloudFront 和 AWS Media Services 提供视频流](live-streaming.md)。

以下主题详细介绍了 CloudFront 分配以及如何配置这些分配以满足业务需求。有关创建分配的更多信息，请参阅[创建分配](distribution-web-creating-console.md)。

**Topics**
+ [了解多租户分配的工作原理](distribution-config-options.md)
+ [创建分配](distribution-web-creating-console.md)
+ [预配置的分配设置参考](template-preconfigured-origin-settings.md)
+ [所有分配设置参考](distribution-web-values-specify.md)
+ [测试分配](distribution-web-testing.md)
+ [更新分配](HowToUpdateDistribution.md)
+ [标记分配](tagging.md)
+ [删除分配](HowToDeleteDistribution.md)
+ [在 CloudFront 分配中使用各种源](DownloadDistS3AndCustomOrigins.md)
+ [为 CloudFront 分配启用 IPv6](cloudfront-enable-ipv6.md)
+ [使用 CloudFront 持续部署来安全地测试 CDN 配置更改](continuous-deployment.md)
+ [通过添加备用域名（CNAME）使用自定义 URL](CNAMEs.md)
+ [将 WebSocket 与 CloudFront 分配结合使用](distribution-working-with.websockets.md)
+ [请求任播静态 IP 以用于许可列表](request-static-ips.md)
+ [将 gRPC 与 CloudFront 分配结合使用](distribution-using-grpc.md)

# 了解多租户分配的工作原理
<a name="distribution-config-options"></a>

可以使用可在多个分配租户之间重用的设置来创建 CloudFront 多租户分配。使用多租户分配，可以让 CloudFront 根据内容源类型为您配置分配设置。有关预配置设置的更多详细信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

使用多租户分配而不是标准分配的优势包括：
+ 减轻运营负担。
+ 面向 Web 管理员和软件提供商的可重用配置，用于管理向终端用户交付内容的多个 Web 应用程序的 CloudFront 分配。
+ 与其它 AWS 服务的增强集成，可大规模提供自动证书管理、统一的安全控制和轻松的配置控制。
+ 在实施中保持一致的资源模式。定义必须共享的设置，然后为要覆盖的设置指定自定义项。
+ 可自定义的源和安全设置，以满足分配租户级别的特定需求。
+ 将分配租户组织成不同的层级。例如，如果一些分配租户需要源护盾，而一些分配租户不需要，您可以将分配租户分组为不同的多租户分配。
+ 在多个域间共享通用 DNS 配置。

与标准分配不同，无法直接访问多租户分配，因为它没有 CloudFront 路由端点。因此，它必须与连接组和一个或多个分配租户结合使用。尽管标准分配具有其自己的 CloudFront 端点，并且可以由终端用户直接访问，但它们不能用作其它分配的模板。

有关多租户分配配额的信息，请参阅[有关多租户分配的配额](cloudfront-limits.md#limits-template)。

**Topics**
+ [工作原理](#how-template-distribution-works)
+ [术语](#template-distributions-concepts)
+ [不支持的功能](#unsupported-saas)
+ [分配租户自定义](tenant-customization.md)
+ [为 CloudFront 分配租户申请证书](managed-cloudfront-certificates.md)
+ [创建自定义连接组（可选）](custom-connection-group.md)
+ [迁移到多租户分配](template-migrate-distribution.md)

## 工作原理
<a name="how-template-distribution-works"></a>

在*标准分配*中，分配包含您要为网站或应用程序启用的所有设置，例如源配置、缓存行为和安全设置。如果您想创建一个单独的网站并使用许多相同的设置，则每次都需要创建新的分配。

CloudFront 多租户分配的不同之处在于，您可以创建一个初始多租户分配。对于每个新网站，您都要创建一个分配租户，该租户会自动继承其源分配的已定义值。然后，可以为分配租户自定义特定的设置。

**概述**

1. 首先，您需要创建一个多租户分配。CloudFront 根据内容源类型为您配置分配设置。可以为除 VPC 源以外的所有源自定义设置。VPC 源设置是在 VPC 源资源本身上自定义的。有关您可以自定义的多租户分配设置的更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。
   + 分配租户可以继承您用于多租户分配的 TLS 证书。多租户分配本身是不可路由的，因此它不会有与之关联的域名。

1. 默认情况下，CloudFront 会为您创建一个连接组。连接组控制着查看器对内容的请求如何连接到 CloudFront。您可以在连接组中自定义一些路由设置。

   您可以通过手动创建自己的连接组来对此进行更改。有关更多信息，请参阅 [创建自定义连接组（可选）](custom-connection-group.md)。

1. 然后，创建一个或多个分配租户。分配租户是查看器访问您的内容的“前门”。每个分配租户都引用多租户分配，并自动与 CloudFront 为您创建的连接组关联。分配租户支持单独的域或子域。

1. 然后，您可以自定义一些分配租户设置，例如虚拟域和源路径。有关更多信息，请参阅 [分配租户自定义](tenant-customization.md)。

1. 最后，您必须更新 DNS 主机中的 DNS 记录，才能将流量路由到分配租户。为此，请从连接组中获取 CloudFront 端点值，然后创建指向 CloudFront 端点的 CNAME 记录。

**Example 示例**  
下图演示了多租户分配、分配租户和连接组如何协同工作，来为多个域的查看器提供内容。  

1. 多租户分配定义了每个分配租户的继承设置。可以使用多租户分配作为模板。

1. 从多租户分配中创建的每个分配租户都有其自己的域。

1. 分配租户会自动添加到当您创建多租户分配时 CloudFront 为您创建的连接组中。连接组控制着查看器请求如何连接到 CloudFront 网络。

![\[多租户分配如何与分配租户结合使用。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/template_distribution.png)


有关创建多租户分配的详细说明，请参阅[在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

## 术语
<a name="template-distributions-concepts"></a>

以下概念描述了多租户分配的组件：

**多租户分配**  
一种蓝图、多租户分配，它为任何分配租户指定所有共享配置设置，包括缓存行为、安全保护和源。多租户分配无法直接提供流量。它们必须与连接组和分配租户结合使用。

**标准分配**  
不具有多租户功能的分配。这些分配最适合支持单个网站或应用程序。

**分配租户**  
分配租户继承多租户分配配置。某些配置设置可以在分配租户级别进行自定义。分配租户必须拥有有效的 TLS 证书，只要该证书涵盖分配租户域或子域，就可以从多租户分配中继承该证书。  
分配租户必须与连接组关联。当您创建分配租户时，CloudFront 会为您创建一个连接组，并自动将所有分配租户分配给该连接组。

**多租户**  
可以使用多租户分配跨多个域提供内容，同时共享配置和基础设施。这种方法可让不同的域（称为租户）共享多租户分配中的通用设置，同时保持自己的自定义设置。

**连接组**  
提供向查看器提供内容的 CloudFront 路由端点。您必须将每个分配租户与一个连接组关联，才能为您针对分配租户域或子域创建的 CNAME 记录获取相应的 CloudFront 路由端点。连接组可以在多个分配租户间共享。连接组管理分配租户的路由设置，例如 IPv6 和任播 IP 列表设置。

**参数**  
占位符值（例如源路径和域名）的键值对列表。您可以在多租户分配中定义参数，并在分配租户级别为这些参数提供值。您可以选择是否需要为分配租户输入参数值。  
如果您没有为分配租户中的某个可选参数提供值，则多租户分配中的默认值将用作该值。

**CloudFront 路由端点**  
连接组的规范 DNS，例如 `d123.cloudfront.net`。在分配租户域或子域的 CNAME 记录中使用。

**自定义内容**  
您可以自定义分配租户，以便它们使用与多租户分配*不同*的设置。对于每个分配租户，您可以指定不同的 AWS WAF Web 访问控制列表（ACL）、TLS 证书和地理限制。

## 不支持的功能
<a name="unsupported-saas"></a>

以下功能不能用于多租户分配。如果您想使用与标准分配相同的设置来创建新的多租户分配，请注意某些设置不可用。

**备注**  
目前，AWS Firewall Manager 策略仅适用于标准分配。Firewall Manager 将在未来的版本中增加对多租户分配的支持。
与标准分配不同，您可以在*分配租户*级别指定域名（别名）。有关更多信息，请参阅[为 CloudFront 分配租户申请证书](managed-cloudfront-certificates.md)和 [CreateDistributionTenant](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistributionTenant.html) API 操作。
+ [持续部署](continuous-deployment.md)
+ [来源访问身份（OAI）](private-content-restricting-access-to-s3.md#private-content-restricting-access-to-s3-oai)：改用[来源访问控制（OAC）](private-content-restricting-access-to-origin.md)。
+ [专用 IP 自定义 SSL 支持](DownloadDistValuesGeneral.md#DownloadDistValuesClientsSupported)：仅支持 `sni-only` 方法。
+ [AWS WAF 经典（V1）Web ACL](DownloadDistValuesGeneral.md#DownloadDistValuesWAFWebACL)：仅支持 AWS WAF V2 Web ACL。
+ [标准日志记录（旧版）](standard-logging-legacy-s3.md)
+ [最小 TTL](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMinTTL)
+ [默认 TTL](DownloadDistValuesCacheBehavior.md#DownloadDistValuesDefaultTTL)
+ [最大 TTL](DownloadDistValuesCacheBehavior.md#DownloadDistValuesMaxTTL)
+ [ForwardedValues](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ForwardedValues.html)
+ [PriceClass](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DistributionConfig.html)
+ [可信签署人](DownloadDistValuesCacheBehavior.md#DownloadDistValuesTrustedSigners)
+ [Smooth Streaming](DownloadDistValuesCacheBehavior.md#DownloadDistValuesSmoothStreaming)
+ [AWS Identity and Access Management（IAM）服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)
+ [专用 IP 地址](cnames-https-dedicated-ip-or-sni.md#cnames-https-dedicated-ip)
+ [最低协议版本 SSLv3](DownloadDistValuesGeneral.md#DownloadDistValues-security-policy)

无法在多租户分配或分配租户中配置以下设置。相反，可以在连接组中设置所需的值。连接组中关联的所有分配租户都将使用这些设置。有关更多信息，请参阅 [创建自定义连接组（可选）](custom-connection-group.md)。
+ [启用 IPv6（查看器请求）](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6)
+ [任播静态 IP 列表](request-static-ips.md)

# 分配租户自定义
<a name="tenant-customization"></a>

使用多租户分配时，分配租户会继承多租户分配配置。但是，可以在分配租户级别自定义某些设置。

可以自定义以下各项：
+ **参数**：参数是可用于源域或源路径的键值对。请参阅[参数如何与分配租户结合使用](#tenant-customize-parameters)。
+ **AWS WAF Web ACL（V2）**：可以为分配租户指定单独的 Web ACL，这将*覆盖*用于多租户分配的 Web ACL。还可以为特定的分配租户禁用此设置，这意味着该分配租户将不会从多租户分配继承 Web ACL 保护。有关更多信息，请参阅 [AWS WAF Web ACL](DownloadDistValuesGeneral.md#DownloadDistValuesWAFWebACL)。
+ **地理限制**：您为分配租户指定的地理限制将*覆盖*多租户分配的任何地理限制。例如，如果您在多租户分配中屏蔽德国（DE），则所有关联的分配租户也将屏蔽 DE。但是，如果您对特定的分配租户支持 DE，则该分配租户设置将覆盖多租户分配的设置。有关更多信息，请参阅 [限制您的内容的地理分配](georestrictions.md)。
+ **失效路径**：为分配租户指定要失效的内容的文件路径。有关更多信息，请参阅 [使文件失效](Invalidation_Requests.md)。
+ **自定义 TLS 证书**：您为分配租户指定的 AWS Certificate Manager（ACM）证书是对多租户分配中提供的证书的补充。但是，如果多租户分配证书和分配租户证书都涵盖同一个域，则使用租户证书。有关更多信息，请参阅 [为 CloudFront 分配租户申请证书](managed-cloudfront-certificates.md)。
+ **域名**：您必须为每个分配租户指定至少一个域名。

## 参数如何与分配租户结合使用
<a name="tenant-customize-parameters"></a>

参数是可用于占位符值的键值对。定义要在多租户分配中使用的参数，并指定它们是否为必需参数。

在多租户分配中定义参数时，您可以选择是否需要在分配租户级别输入这些参数。
+ 如果您在多租户分配中将参数定义为*必需*的参数，则必须在分配租户级别输入这些参数。（不继承这些参数）。
+ 如果参数*不是必需的*，则可以在多租户分配中提供由分配租户继承的默认值。

您可以在以下属性中使用参数：
+ 源域名
+ 源路径

在多租户分配中，最多可以为之前的每个属性定义两个参数。

## 示例参数
<a name="examples-parameters"></a>

请参阅以下示例，了解如何将参数用于域名和源路径。

**域名参数**

在多租户分配配置中，您可以为源域名定义一个参数，如下例所示：

**Amazon S3**
+ `{{parameter1}}.amzn-s3-demo-logging-bucket.s3.us-east-1.amazonaws.com`
+ `{{parameter1}}–amzn-s3-demo-logging-bucket.s3.us-east-1.amazonaws.com`

**自定义源**
+ `{{parameter1}}.lambda-url.us-east-1.on.aws`
+ `{{parameter1}}.mediapackagev2.ap-south-1.amazonaws.com`

创建分配租户时，请指定要用于 `parameter1` 的值。

```
"Parameters": [
  {
    "Name": "parameter1",
    "Value": "mycompany-website"
  }
]
```

使用前面在多租户分配中指定的示例，分配租户的源域名解析为以下内容：
+ `mycompany-website.amzn-s3-demo-bucket3.s3.us-east-1.amazonaws.com`
+ `mycompany-website–amzn-s3-demo-bucket3.s3.us-east-1.amazonaws.com`
+ `mycompany-website.lambda-url.us-east-1.on.aws`
+ `mycompany-website.mediapackagev2.ap-south-1.amazonaws.com`

**源路径参数**

同样，您可以为多租户分配中的源路径定义参数，如下例所示：
+ `/{{parameter2}}`
+ `/{{parameter2}}/test`
+ `/public/{{parameter2}}/test`
+ `/search?name={{parameter2}}`

创建分配租户时，请指定要用于 `parameter2` 的值。

```
"Parameters": [
  {
    "Name": "parameter2",
    "Value": "myBrand"
  }
]
```

使用前面在多租户分配中指定的示例，分配租户的源路径解析为以下内容：
+ `/myBrand`
+ `/myBrand/test`
+ `/public/myBrand/test`
+ `/search?name=myBrand`



**Example 示例**  
您想为客户创建多个网站（租户），并且需要确保每个分配租户资源使用正确的值。  

1. 您可以创建多租户分配，并包含两个用于分配租户配置的参数。

1. 对于源域名，创建一个名为 *customer-name* 的参数并指定该参数为必需的。在 S3 存储桶之前输入该参数，使其显示为：

   `{{customer-name}}.amzn-s3-demo-bucket3.s3.us-east-1.amazonaws.com`.

1. 对于源路径，创建名为 *my-theme* 的第二个参数，并指定它是可选的，默认值为 *basic*。源路径显示为：`/{{my-theme}}`

1. 当您创建分配租户时：
   + 对于域名，您必须为 *customer-name* 指定一个值，因为它在多租户分配中标记为必填项。
   + 对于源路径，您可以选择为 *my-theme* 指定一个值或使用默认值。

# 为 CloudFront 分配租户申请证书
<a name="managed-cloudfront-certificates"></a>

创建分配租户时，该租户从多租户分配继承共享 AWS Certificate Manager（ACM）证书。此共享证书为与多租户分配关联的所有租户提供 HTTPS。

在创建或更新 CloudFront 分配租户以添加域时，可以从 ACM 添加托管式 CloudFront 证书。然后，CloudFront 将代表您从 ACM 获得经 HTTP 验证的证书。可以将此租户级别 ACM 证书用于自定义域配置。CloudFront 简化了续订工作流程，有助于将证书保持为最新状态并确保内容交付不间断。

**注意**  
您拥有证书，但它*只能*与 CloudFront 资源结合使用，并且*无法*导出私有密钥。

可以在创建或更新分配租户时申请证书。

**Topics**
+ [添加域和证书（分配租户）](#vanity-domain-tls-tenant)
+ [完成域设置](#complete-domain-ownership)
+ [将域指向 CloudFront](#point-domains-to-cloudfront)
+ [域注意事项（分配租户）](#tenant-domain-considerations)
+ [通配符域（分配租户）](#tenant-wildcard-domains)

## 添加域和证书（分配租户）
<a name="vanity-domain-tls-tenant"></a>

以下过程演示了如何为分配租户添加域和更新证书。

**添加域和证书（分配租户）**

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

1. 在 **SaaS** 下，选择**分配租户**。

1. 搜索分配租户。使用搜索栏中的下拉菜单，按域、名称、分配 ID、证书 ID、连接组 ID 或 Web ACL ID 进行筛选。

1. 选择分配租户名称。

1. 对于**域**，选择**管理域**。

1. 对于**证书**，选择是否要为分配租户使用**自定义 TLS 证书**。该证书会验证您是否获得授权可使用该域名。该证书必须存在于美国东部（弗吉尼亚州北部）区域中。

1. 对于**域**，选择**添加域**并输入域名。根据您的域，以下消息将出现在您输入的域名下方。
   + 证书涵盖此域。
   + 证书涵盖此域，等待验证。
   + 证书不涵盖此域。（这意味着您必须验证域所有权。）

1. 选择**更新分配租户**。

   在租户详细信息页面的**域**之下，您可以看到以下字段：
   + **域所有权**：域所有权的状态。在 CloudFront 可以提供内容之前，必须使用 TLS 证书验证来验证域所有权。
   + **DNS 状态**：域的 DNS 记录必须指向 CloudFront，才能正确地路由流量。

1. 如果域所有权未得以验证，请在租户详细信息页面的**域**之下，选择**完成域设置**，然后完成以下过程来将 DNS 记录指向您的 CloudFront 域名。

## 完成域设置
<a name="complete-domain-ownership"></a>

按照这些过程来验证您拥有分配租户的域。根据您的域，选择以下过程之一。

**注意**  
如果域已使用 Amazon Route 53 别名记录指向 CloudFront，则必须在域名前面添加带有 `_cf-challenge.` 的 DNS TXT 记录。此 TXT 记录可验证域名是否已关联到 CloudFront。对每个域重复此步骤。以下内容显示如何更新 TXT 记录：  
记录名称：`_cf-challenge.DomainName`
记录类型：`TXT`
记录值：`CloudFrontRoutingEndpoint`
例如，TXT 记录类似于：`_cf-challenge.example.com TXT d111111abcdef8.cloudfront.net`  
您可以在控制台中的分配租户详细信息页面上找到 CloudFront 路由端点，也可以使用《Amazon CloudFront API Reference》**中的 [ListConnectionGroups](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListConnectionGroups.html) API 操作来找到该端点。

**提示**  
如果您是 SaaS 提供商，并且想要在不要求客户（租户）直接向其 DNS 中添加 TXT 记录的情况下支持证书颁发，请执行以下操作：  
如果您拥有域 `example-saas-provider.com`，请将子域分配给您的租户，例如 `customer-123.example-saas-provider.com`
在 DNS 中，将 `_cf-challenge.customer-123.example-saas-provider.com TXT d111111abcdef8.cloudfront.net` TXT 记录添加到 DNS 配置中。
接下来，您的客户（租户）可以更新其自己的 DNS 记录，以便将其域名映射到您提供的子域。  
`www.customer-domain.com CNAME customer-123.example-saas-provider.com`

------
#### [ I have existing traffic ]

如果域无法容忍停机时间，请选择此选项。您必须有权访问源/Web 服务器。使用以下过程验证域所有权。

**当有现有流量时完成域设置**

1. 对于**指定 Web 流量**，选择**我有现有流量**，然后选择**下一步**。

1. 对于**验证域所有权**，请选择以下选项之一：
   + **使用现有证书**：搜索现有 ACM 证书，或输入涵盖所列域的证书 ARN。
   + **手动上传文件**：选择您是否拥有将文件上传到 Web 服务器的直接访问权限。

     对于每个域，创建一个纯文本文件（其中包含来自**令牌位置**的验证令牌），然后将其上传到位于现有服务器上指定**文件路径**处的源。此文件的路径可能如以下示例所示：`/.well-known/pki-validation/acm_9c2a7b2ec0524d09fa6013efb73ad123.txt`。完成该步骤后，ACM 会验证令牌，然后为该域颁发 TLS 证书。
   + **HTTP 重定向**：如果您不具有将文件上传到 Web 服务器的直接访问权限，或者您正在使用 CDN 或代理服务，请选择此选项。

     对于每个域，在现有服务器上创建 301 重定向。复制**重定向自**下的已知路径，并指向**重定向至**下的指定证书端点。重定向可能类似于以下示例：

     ```
     If the URL matches: example.com/.well-known/pki-validation/leabe938a4fe077b31e1ff62b781c123.txt
     Then the settings are:Forwarding URL
     Then 301 Permanent Redirect:To validation.us-east-1.acm-validations.aws/123456789012/.well-known/pki-validation/leabe938a4fe077b31e1ff62b781c123.txt
     ```
**注意**  
可以选择**检查证书状态**来验证 ACM 何时为该域颁发证书。

1. 选择**下一步**。

1. 完成[将域指向 CloudFront](#point-domains-to-cloudfront) 的步骤。

------
#### [ I don't have traffic ]

如果您要添加新域，请选择此选项。CloudFront 将为您管理证书验证。

**在没有流量的情况下完成域设置**

1. 在**指定 Web 流量**中，选择**我还没有流量**。

1. 对于每个域名，请完成[将域指向 CloudFront](#point-domains-to-cloudfront) 的步骤。

1. 在更新每个域名的 DNS 记录后，选择**下一步**。

1. 等待颁发证书。
**注意**  
可以选择**检查证书状态**来验证 ACM 何时为该域颁发证书。

1. 选择**提交**。

------

## 将域指向 CloudFront
<a name="point-domains-to-cloudfront"></a>

更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 路由端点。您可以有多个域名，但它们必须全部解析到此端点。

**将域指向 CloudFront**

1. 复制 CloudFront 路由端点值，例如 d111111abcdef8.cloudfront.net。

1. 更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 路由端点。

   1. 登录到域注册商或 DNS 提供商管理控制台。

   1. 导航到域的 DNS 管理部分。
      + **对于子域**：创建 CNAME 记录。例如：
        + **名称**：子域（例如 `www` 或 `app`）
        + **值/目标**：CloudFront 路由端点
        + **记录类型**：CNAME
        + **TTL**：3600（或任何适合用例的值）
      + **对于顶级域/根域**：这需要唯一的 DNS 配置，因为不能在根域或顶级域级别使用标准 CNAME 记录。由于大多数 DNS 提供商不支持 ALIAS 记录，因此建议在 Route 53 中创建 ALIAS 记录。例如：
        + **名称**：顶级域（例如 `example.com`）
        + **记录类型**：A
        + **别名**：是
        + **别名目标**：CloudFront 路由端点
        + **路由策略**：简单（或任何适合用例的策略）

   1. 验证 DNS 更改是否已传播。（这通常在 TTL 过期时发生。有时可能需要 24-48 小时。） 使用 `dig` 或 `nslookup` 之类的工具。

      ```
      dig www.example.com
      # Should eventually return a CNAME pointing to your CloudFront routing endpoint
      ```

1. 返回 CloudFront 控制台并选择**提交**。当域处于活动状态时，CloudFront 会更新域状态，以表明域已准备好提供流量。

有关更多信息，请参阅 DNS 提供商的文档：
+ [Cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/)
+ [ClouDNS](https://www.cloudns.net/wiki/article/9/)
+ [DNSimple](https://support.dnsimple.com/categories/dns/)
+ [Gandi.net](https://www.gandi.net/)
+ [GoDaddy](https://www.godaddy.com/help/manage-dns-records-680)
+ [Google Cloud DNS](https://cloud.google.com/dns/docs/records)
+ [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/767/10/how-to-change-dns-for-a-domain/)

## 域注意事项（分配租户）
<a name="tenant-domain-considerations"></a>

当域处于活动状态时，域控制已建立，CloudFront 将响应查看器对该域的所有请求。一旦激活，域就无法停用或更改为非活动状态。当域已在使用中时，该域无法与其它 CloudFront 资源关联。要将该域与其它分配相关联，请使用 [UpdateDomainAssociation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDomainAssociation.html) 请求将该域从一个 CloudFront 资源移到另一个 CloudFront 资源。

当域处于非活动状态时，CloudFront 将不会响应查看器对该域的请求。当域处于非活动状态时，请注意以下情况：
+ 如果您有待处理的证书请求，CloudFront 将响应对已知路径的请求。当请求处于待处理状态时，域无法与任何其它 CloudFront 资源关联。
+ 如果您没有待处理的证书请求，CloudFront 将不会响应对该域的请求。可以将该域与其它 CloudFront 资源相关联。
+ 对于每个分配租户，您只能有*一个待处理的证书请求*。您必须先取消现有待处理的请求，然后才能为其它域请求另一个证书。取消现有证书请求不会删除关联的 ACM 证书。可以使用 ACM API 将其删除。
+ 如果您将新证书应用于分配租户，这将取消与先前证书的关联。可以重用该证书来涵盖其它分配租户的域。

与续订经 DNS 验证的证书一样，当证书续订成功时，您会收到通知。然而，您不需要做任何其它事情。CloudFront 将自动管理域的证书续订。

**注意**  
您无需调用 ACM API 操作，即可创建或更新证书资源。您可以通过使用 [CreateDistributionTenant](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistributionTenant.html) 和 [UpdateDistributionTenant](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistributionTenant.html) API 操作来管理证书，以便为托管式证书请求指定详细信息。

## 通配符域（分配租户）
<a name="tenant-wildcard-domains"></a>

在以下情况下，分配租户支持通配符域：
+ 当通配符包含在从父多租户分配继承的共享证书中时
+ 当您为分配租户使用有效的现有自定义 TLS 证书时

# 创建自定义连接组（可选）
<a name="custom-connection-group"></a>

默认情况下，当您创建多租户分配时，CloudFront 会为您创建一个连接组。连接组控制着查看器对内容的请求如何连接到 CloudFront。

我们建议您使用默认连接组。但是，如果您需要隔离企业应用程序或单独管理分配租户组，则可以选择创建自定义连接组。例如，如果分配租户遭受 DDoS 攻击，您可能需要将其移至单独的连接组。这样就可以保护其它分配租户免受影响。

## 创建自定义连接组（可选）
<a name="create-connection-group"></a>

或者，您可以选择为分配租户创建自定义连接组。

**创建自定义连接组（可选）**

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

1. 在导航窗格中，选择**设置**。

1. 开启**连接组**设置。

1. 在导航窗格中，选择**连接组**，然后选择**创建连接组**。

1. 对于**连接组名称**，输入连接组的名称。创建连接组后，您将无法更新此名称。

1. 对于 **IPv6**，请指定是否要启用此 IP 协议。有关更多信息，请参阅 [启用 IPv6（查看器请求）](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6)。

1. 对于**任播静态 IP 列表**，请指定是否要从一组 IP 地址向分配租户传送流量。有关更多信息，请参阅[任播静态 IP 列表](request-static-ips.md)。

1. （可选）向连接组添加标签。

1. 选择**创建连接组**。

创建连接组后，您可以找到您指定的设置以及 ARN 和端点。
+ ARN 类似于以下示例：`arn:aws:cloudfront::123456789012:connection-group/cg_2uVbA9KeWaADTbKzhj9lcKDoM25`
+ 端点类似于以下示例：d111111abcdef8.cloudfront.net

创建自定义连接组后，可以对其进行编辑或将其删除。在删除连接组之前，必须先从中删除所有关联的分配租户。您无法删除您在创建多租户分配时 CloudFront 为您创建的默认连接组。

**重要**  
如果您更改分配租户的连接组，CloudFront 将继续为该分配租户传输流量，但会增加延迟。我们建议您更新分配租户的 DNS 记录，以使用来自新连接组的 CloudFront 路由端点。  
在您更新 DNS 记录之前，CloudFront 将根据为网站当前通过 DNS 指向的路由端点所定义的设置进行路由。例如，假设默认连接组不使用任播静态 IP，但新的自定义连接组使用它们。您必须先更新 DNS 记录，然后 CloudFront 才会对自定义连接组中的分配租户使用任播静态 IP。

# 迁移到多租户分配
<a name="template-migrate-distribution"></a>

如果您有 CloudFront 标准分配，并且想要迁移到多租户分配，请按照以下步骤操作。

**从标准分配迁移到多租户分配**

1. 查看[不支持的功能](distribution-config-options.md#unsupported-saas)。

1. 使用与标准分配相同的配置（减去不支持的功能）创建多租户分配。有关更多信息，请参阅 [在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

1. 创建分配租户并添加您拥有的备用域名。
**警告**  
请*勿*使用与标准分配关联的当前域名。而是添加占位符域。稍后，您将移动您的域名。有关创建分配租户的更多信息，请参阅[在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

1. 为分配租户域提供现有证书。该证书将涵盖占位符域和您要移动的域。

1. 从控制台中的分配租户详细信息页面复制 CloudFront 路由端点。或者，也可以使用《Amazon CloudFront API Reference》**中的 [ListConnectionGroups](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListConnectionGroups.html) API 操作进行查找。

1. 要验证域所有权，请创建一条带有下划线（\$1）前缀的 DCV TXT 记录，该记录指向分配租户的 CloudFront 路由端点。有关更多信息，请参阅 [将域指向 CloudFront](managed-cloudfront-certificates.md#point-domains-to-cloudfront)。

1. 当您的更改传播完毕后，请更新分配租户，以使用之前用于标准分配的域。
   + **控制台**：有关详细说明，请参阅[添加域和证书（分配租户）](managed-cloudfront-certificates.md#vanity-domain-tls-tenant)。
   + **API**：使用《Amazon CloudFront API Reference》**中的 [UpdateDomainAssociation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDomainAssociation.html) API 操作。
**重要**  
这将重置内容的缓存密钥。之后，CloudFront 开始使用新的缓存密钥缓存您的内容。有关更多信息，请参阅 [了解缓存键](understanding-the-cache-key.md)。

1. 更新 DNS 记录，以便将域指向分配租户的 CloudFront 路由端点。完成此步骤后，域就准备就绪，可以为分配租户提供流量了。有关更多信息，请参阅 [将域指向 CloudFront](managed-cloudfront-certificates.md#point-domains-to-cloudfront)。

1. （可选）在成功将域迁移到分配租户后，可以使用另一个 CloudFront 托管式证书，该证书涵盖分配租户的域名。要请求托管式证书，请创建单独的 TXT 记录来颁发证书，然后按照[完成域设置](managed-cloudfront-certificates.md#complete-domain-ownership)中的步骤操作。

# 创建分配
<a name="distribution-web-creating-console"></a>

本主题介绍如何使用 CloudFront 控制台创建分配。<a name="create-download-distribution-task-list"></a>

**概述**

1. 根据您的源服务器创建一个或多个 Amazon S3 存储桶或配置 HTTP 服务器。*源*是您存储内容的原始版本的位置。当 CloudFront 获得您的文件请求时，它将转到源，以获取其在边缘站点分配的文件。您可使用 Amazon S3 存储桶和 HTTP 服务器的任意组合作为您的源服务器。
   + 如果您使用 Amazon S3，则存储桶的名称必须全部小写，并且不能包含空格。
   + 如果您使用 Amazon EC2 服务器或其他自定义源，请查看[使用 Amazon EC2（或其他自定义源）](DownloadDistS3AndCustomOrigins.md#concept_CustomOrigin)。
   + 有关您可以为分配创建的源的当前最大数量或要请求提高限额，请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

1. 将内容上传到源服务器。您可以使对象公开可读，也可以使用 CloudFront 签名的 URL 来限制对内容的访问。
**重要**  
您负责确保源服务器的安全。您必须确保 CloudFront 有权限访问服务器，并确保安全设置可保护您的内容。

1. 创建 CloudFront 分配：
   + 有关在 CloudFront 控制台中创建分配的详细步骤，请参阅[在控制台中创建 CloudFront 分配](#create-console-distribution)。
   + 有关使用 CloudFront API 创建分配的信息，请参阅《Amazon CloudFront API 参考》**中的 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

1. （可选）如果您使用 CloudFront 控制台创建分配，则可为分配创建更多缓存行为或源。有关行为和源的更多信息，请参阅[更新多租户分配](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)。

1. 测试您的分配。有关测试的更多信息，请参阅 [测试分配](distribution-web-testing.md)。

1. 开发您的网站或应用程序，以使用 CloudFront 在您在第 3 步创建分配后返回的域名访问您的内容。例如，如果 CloudFront 返回 d111111abcdef8.cloudfront.net 作为分配的域名，则 Amazon S3 存储桶中或 HTTP 服务器上根目录中的文件 `image.jpg` 的 URL 为 `https://d111111abcdef8.cloudfront.net/image.jpg`。

   如果您在创建分配时指定了一个或多个备用域名 (CNAME)，则可使用您自己的域名。在这种情况下，`image.jpg` 的 URL 可能是 `https://www.example.com/image.jpg`。

   请注意以下几点：
   + 如果您想使用签署的 URL 来限制对内容的访问，请参阅 [使用签名 URL 和签名 Cookie 提供私有内容](PrivateContent.md)。
   + 如果您想提供压缩的内容，请参阅 [提供压缩文件](ServingCompressedFiles.md)。
   + 有关 CloudFront 请求和 Amazon S3 的响应行为以及自定义源的信息，请参阅[请求和响应行为](RequestAndResponseBehavior.md)。

**Topics**
+ [在控制台中创建 CloudFront 分配](#create-console-distribution)
+ [CloudFront 在控制台中显示的值](#distribution-web-values-returned)
+ [其他链接](#distribution-helpful-links)
+ [将域添加到 CloudFront 标准分配中](add-domain-existing-distribution.md)

## 在控制台中创建 CloudFront 分配
<a name="create-console-distribution"></a>

当您创建分配时，CloudFront 会根据内容源类型为您配置分配设置。有关预配置设置的更多详细信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。还可以使用可在多个分配租户之间重用的设置来创建多租户分配。有关更多信息，请参阅 [了解多租户分配的工作原理](distribution-config-options.md)。或者，您可以手动配置您自己的分配设置。

------
#### [ Multi-tenant ]<a name="CreatingDownloadDistributionsConsoleProcedure"></a>

**创建多租户分配**

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

1. 在导航窗格中，选择**分配**，然后选择**创建分配**。

1. 依次选择**多租户架构**和**下一步**。

1. 输入多租户分配的**分配名称**。该名称将作为 `Name` 键的值出现。您以后可以更改此值。最多可以为多租户分配添加 50 个标签。有关更多信息，请参阅 [标记分配](tagging.md)。

1. （可选）对于**通配符证书**，请选择将涵盖根域下所有子域的 AWS Certificate Manager（ACM）证书，例如 *\$1.example.com*。该证书必须位于美国东部（弗吉尼亚州北部）区域中。

1. 选择**下一步**。

1. 在**指定源**页面上，选择 CloudFront 将从中获取内容的源类型。CloudFront 将为多租户分配使用该源类型的建议设置。有关建议设置的更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

1. 对于**源**，在您选择的源类型下，选择或输入要使用的源。

1. 对于**源路径**，输入正斜杠 (`/`) 字符，然后输入源路径。

1. （可选）要添加参数，请为源域名或源路径选择**插入参数**。最多可以为每个字段输入两个参数。

   1. 选择**创建新参数**。

   1. 在**创建新参数**对话框上，对于**参数名称**，输入参数的唯一名称以及（可选）描述。

   1. 对于**必需参数**，选中该复选框，以使此参数值在分配租户级别成为必需的。如果该值不是必需的，请输入分配租户将继承的**默认值**。

   1. 选择**创建参数**。此参数出现在相应的字段中。

1. 对于**选项**，请选择以下选项之一：
   + **使用建议的源设置**：对您选择的源类型使用默认的建议缓存和源设置。
   + **自定义源设置**：自定义缓存和源设置。如果您选择此选项，请指定将显示的您自己的值。

1. 选择**下一步**。

1. 在**启用安全保护**页面上，选择是否启用 AWS WAF 安全保护。可以稍后为特定的分配租户自定义 Web ACL。有关更多信息，请参阅 [为新分配启用 AWS WAF](WAF-one-click.md#enable-waf-new-distribution)。

1. 依次选择**下一步**和**创建分配**。

1. 在**分配**页面上，多租户分配将显示在资源列表中。可以选择**所有分配**下拉列表，以便按标准分配或多租户分配进行筛选。也可以选择**类型**列，以便按标准分配或多租户分配进行筛选。

默认情况下，CloudFront 会为您创建一个连接组。连接组控制着查看器对内容的请求如何连接到 CloudFront。您可以在连接组中自定义一些路由设置。有关更多信息，请参阅 [了解多租户分配的工作原理](distribution-config-options.md)。

您可以使用多租户分配作为模板来创建其它分配租户。

**创建分配租户**

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

1. 在导航窗格中，执行下列操作之一：
   + 选择**分配**，选择多租户分配，然后选择**创建租户**。
   + 选择**分配租户**，然后选择**创建租户**。

1. 对于**分配租户名称**，输入名称。该名称在您的 AWS 账户中必须是唯一的，并且在创建后不能更改。

1. 对于**模板分配**，请从列表中选择多租户分配 ID。

1. 对于**管理标签**，最多可以为分配租户添加 50 个键值对。有关更多信息，请参阅[标记分配](tagging.md)。****

1. 选择**下一步**。

1. 在**添加域**页面上，对于**证书**，选择是否要为分配租户使用**自定义 TLS 证书**。该证书会验证您是否获得授权可使用该域名。该证书必须存在于美国东部（弗吉尼亚州北部）区域中。

1. 对于**域**，请输入域名。
**注意**  
如果您输入的域名不在证书的涵盖范围内，您需要验证您拥有该域。您现在仍然可以创建分配租户，稍后验证域所有权。有关更多信息，请参阅 [为 CloudFront 分配租户申请证书](managed-cloudfront-certificates.md)。

1. 选择**下一步**。

1. 在**定义参数**页面上，将显示您在多租户分配中指定的参数。对于必需的参数，请在参数名称旁边输入一个值并保存所做的更改。

1. 要添加其它参数，请选择**添加参数**，然后输入名称和值。

1. 选择**下一步**。

1. （可选）对于**安全性自定义**，如果您选择**覆盖分配设置**，请选择适合用例的选项。

1. （可选）对于**地理限制自定义**，如果您选择**覆盖分配设置**，请为分配租户选择相应的**限制类型**和**国家/地区**。有关更多信息，请参阅 [限制您的内容的地理分配](georestrictions.md)。

1. 选择**下一步**。

1. 选择**创建分配租户**。

您可以在**分配租户**页面上找到所有分配租户。可以按以下条件进行筛选：

**关联**
+ 分配 ID
+ 证书 ID
+ 连接组 ID
+ Web ACL ID

**属性**
+ 名称
+ 域

可以编辑分配租户以自定义特定设置。有关更多信息，请参阅 [分配租户自定义](tenant-customization.md)。

------
#### [ Standard ]

**创建标准分配**

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

1. 在导航窗格中，选择**分配**，然后选择**创建分配**。

1. 输入标准分配的**分配名称**。该名称将显示为 `Name` 键的值（作为标签）。您以后可以更改此值。最多可以为标准分配添加 50 个标签。有关更多信息，请参阅 [标记分配](tagging.md)。

1. 选择**单个网站或应用程序**，然后选择**下一步**。

1. （可选）对于**域设置**，请输入您的 AWS 账户中已经向 Route 53 注册的域，或者注册一个新域。完成设置步骤。
   + 如果域使用 Route 53 以外的 DNS 提供商，您仍可以添加域，但需要在创建分配后添加它。暂时跳过域设置，以便继续创建分配。您必须稍后手动配置域和 TLS 证书。有关更多信息，请参阅 [将域添加到 CloudFront 标准分配中](add-domain-existing-distribution.md)。

1. 选择**下一步**。

1. 在**指定源**页面上，选择 CloudFront 将从中获取内容的源类型。CloudFront 将为分配使用该源类型的建议设置。有关建议设置的更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

1. 对于**源**，选择或输入源。

1. 对于**设置**，选择下列选项之一：
   + **使用建议的源设置**：对您选择的源类型使用默认的建议缓存和源设置。
   + **自定义源设置**：自定义缓存和源设置。如果您选择此选项，请指定您自己的值。

1. 选择**下一步**。

1. 在**启用安全保护**页面上，选择是否启用 AWS WAF 安全保护。

1. 选择**下一步**。

1. （可选）如果您对域使用 Route 53，您将看到 **TLS 证书**页面。如果 CloudFront 在 `us-east-1` AWS 区域的您的 AWS 账户中找不到域的现有 AWS Certificate Manager（ACM）证书，您可以选择自动创建证书或手动创建证书。创建证书后，选择**下一步**。

1. 查看分配详细信息并选择**创建分配**。

1. 在 CloudFront 创建分配后，分配的**状态**列的值将从**正在部署**更改为部署分配的日期和时间。

   CloudFront 指派给分配的域名将出现在分配列表中。（它同时也出现在选定分发的**常规**选项卡上。） 
**提示**  
您可以按照[通过添加备用域名（CNAME）使用自定义 URL](CNAMEs.md)中的步骤使用备用域名，而不是 CloudFront 分配给您的名称

1. 当您的分配已经部署时，请确认您可以使用新的 CloudFront URL（d111111abcdef8.cloudfront.net）或 CNAME 访问您的内容。有关更多信息，请参阅 [测试分配](distribution-web-testing.md)。

1. 当您准备好向分配发送流量时，请务必更新 DNS 记录以指向 CloudFront。有关更多信息，请参阅 [将域指向 CloudFront（标准分配）](add-domain-existing-distribution.md#point-domains-standard)。

------

## CloudFront 在控制台中显示的值
<a name="distribution-web-values-returned"></a>

当您创建新分配或更新现有分配时，CloudFront 将在 CloudFront 控制台中显示以下信息。

**注意**  
有效的可信签署人，即具有有效 CloudFront 密钥对并可用于创建有效签名 URL 的 AWS 账户，目前在 CloudFront 控制台中不可见。

### 分配 ID
<a name="DownloadDistReturnID"></a>

当您使用 CloudFront API 对分配执行操作时，可使用分配 ID 指定要使用的分配，例如 `EDFDVBD6EXAMPLE`。您不能更改分配的分配 ID。

### 部署和状态
<a name="DownloadDistReturnStatus"></a>

部署分配时，您会在**上次修改时间**列下看到**正在部署**状态。等待分配完成部署，并确保**状态**列显示**已启用**。有关更多信息，请参阅 [分配状态](DownloadDistValuesGeneral.md#DownloadDistValuesEnabled)。

### 上次修改时间
<a name="DownloadDistReturnLastModDate"></a>

分配上一次修改的日期和时间，使用 ISO 8601 格式，例如，2012-05-19T19:37:58Z。有关更多信息，请参阅 [https://www.w3.org/TR/NOTE-datetime](https://www.w3.org/TR/NOTE-datetime)。

### 域名
<a name="DownloadDistReturnDomainName"></a>

在对象的链接中使用分配的域名。例如，如果分配的域名为 `d111111abcdef8.cloudfront.net`，`/images/image.jpg` 的链接将为 `https://d111111abcdef8.cloudfront.net/images/image.jpg`。您不能更改分配的 CloudFront 域名。有关对象链接的 CloudFront URL 的更多信息，请参阅[在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。

如果您指定一个或多个备用域名 (CNAME)，则可使用自己的域名，以链接到您的对象，而不是使用 CloudFront 域名。有关别名记录 (CNAME) 的更多信息，请参阅 [备用域名 (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME)。

**注意**  
CloudFront 域名是唯一的。分配的域名从来不用于先前的分配，并且在将来也绝不会重新用于其他的分配。

## 其他链接
<a name="distribution-helpful-links"></a>

有关创建分配的更多信息，请参阅以下链接。
+ 要了解如何创建使用 Amazon Simple Storage Service（Amazon S3）存储桶源和源访问控制（OAC）的分配，请参阅[开始使用 CloudFront 标准分配](GettingStarted.SimpleDistribution.md)。
+ 有关使用 CloudFront API 创建分配的信息，请参阅《Amazon CloudFront API 参考》**中的 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。
+ 有关更新分配（例如，向标准分配添加缓存行为，或自定义分配租户）的信息，请参阅[更新分配](HowToUpdateDistribution.md)。
+ 要查看您可以为每个 AWS 账户创建的当前最大源数量或要请求提高配额（以前称为限制），请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

# 将域添加到 CloudFront 标准分配中
<a name="add-domain-existing-distribution"></a>

创建新的 CloudFront 标准分配后，您可将域添加到其中。（可选）您可以在创建标准分配时为其设置 Amazon Route 53 域。有关更多信息，请参阅 [在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。

## 将域添加到现有标准分配
<a name="add-domain-standard"></a>

**将域添加到标准分配**

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

1. 在导航窗格中，选择**分配**，然后选择分配 ID。

1. 在**设置**下的**备用域名**中，选择**添加域**。

1. 可以输入多达五个域来提供服务。

1. 选择**下一步**。

1. 对于 **TLS 证书**，如果 CloudFront 在 `us-east-1` AWS 区域的您的 AWS 账户中找不到域的现有 AWS Certificate Manager（ACM）证书，您可以创建一个证书。
   + 如果您使用的是 Amazon Route 53（Route 53），CloudFront 会自动为您创建证书。

1. 预置证书后，必须通过 DNS 提供商更新 DNS 记录来证明域所有权。然后，选择**验证证书**。有关更多信息，请参阅 [将域指向 CloudFront（标准分配）](#point-domains-standard)。
   + 如果您使用的是 Route 53，CloudFront 会为您更新 DNS 记录。

1. 选择**下一步**。

1. 查看更改并选择**添加域**。

1. 在向分配发送流量之前，请务必更新 DNS 记录以指向 CloudFront。有关更多信息，请在分配详细信息页面的**设置**部分中选择**将域路由到 CloudFront**。
   + 如果您使用的是 Route 53，则可以让 CloudFront 自动为您设置 DNS 路由。

## 将域指向 CloudFront（标准分配）
<a name="point-domains-standard"></a>

更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 主机名。您可以有多个域名，但它们必须全部解析到此主机名。

**将域指向 CloudFront**

1. 复制 CloudFront 主机名值，例如 d111111abcdef8.cloudfront.net。

1. 更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 主机名。

   1. 登录到域注册商或 DNS 提供商管理控制台。

   1. 导航到域的 DNS 管理部分。
      + **对于子域**：创建 CNAME 记录。例如：
        + **名称**：子域（例如 `www` 或 `app`）
        + **值/目标**：CloudFront 主机名
        + **记录类型**：CNAME
        + **TTL**：3600（或任何适合用例的值）
      + **对于顶级域/根域**：这需要唯一的 DNS 配置，因为不能在根域或顶级域级别使用标准 CNAME 记录。由于大多数 DNS 提供商不支持 ALIAS 记录，因此建议在 Route 53 中创建 ALIAS 记录。例如：
        + **名称**：顶级域（例如 `example.com`）
        + **记录类型**：A
        + **别名**：是
        + **别名目标**：CloudFront 主机名
        + **路由策略**：简单（或任何适合用例的策略）

   1. 验证 DNS 更改是否已传播。（这通常在 TTL 过期时发生。有时可能需要 24-48 小时。） 使用 `dig` 或 `nslookup` 之类的工具。

      ```
      dig www.example.com
      # Should eventually return a CNAME pointing to your CloudFront hostname
      ```

1. 返回 CloudFront 控制台并选择**提交**。当域处于活动状态时，CloudFront 会更新域状态，以表明域已准备好提供流量。

有关更多信息，请参阅 DNS 提供商的文档：
+ [Cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/)
+ [ClouDNS](https://www.cloudns.net/wiki/article/9/)
+ [DNSimple](https://support.dnsimple.com/categories/dns/)
+ [Gandi.net](https://www.gandi.net/)
+ [GoDaddy](https://www.godaddy.com/help/manage-dns-records-680)
+ [Google Cloud DNS](https://cloud.google.com/dns/docs/records)
+ [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/767/10/how-to-change-dns-for-a-domain/)

# 预配置的分配设置参考
<a name="template-preconfigured-origin-settings"></a>

当您创建 CloudFront 分配时，CloudFront 会自动根据内容源类型为您配置大多数分配设置。（可选）您可以选择手动编辑分配设置。有关更多信息，请参阅 [所有分配设置参考](distribution-web-values-specify.md)。

以下各节描述了分配的默认预配置设置以及您可以自定义的设置。

## Amazon S3 源
<a name="s3-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为 Amazon S3 源预配置的源设置。

**源设置（预配置）**
+ **来源访问控制（仅限控制台）**：CloudFront 为您设定此设置。对于标准分配以及源域中未使用任何参数的多租户分配，CloudFront 尝试添加 S3 存储桶策略。
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3

以下是 CloudFront 在多租户分配中为 Amazon S3 源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD`
+ **限制查看器访问**：否
+ **缓存策略**：`CachingOptimized`
+ **源请求策略**：无
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

以下是您可以在多租户分配中为 Amazon S3 源自定义的设置。

**可自定义的设置**
+ **S3 访问权限**：CloudFront 根据您的 S3 存储桶设置为您设定此设置：
  + **如果存储桶是公有的**：不需要任何来源访问控制（OAC）策略。
  + **如果存储桶是私有的**：可以选择或创建要使用的 OAC 策略。
+ **启用源护盾**：否
+ **自动压缩对象**：是
  + 如果选择**是**，则使用 `CachingOptimized` 缓存策略。
  + 如果选择**否**，则使用 `CachingOptimizedForUncompressedObjects` 缓存策略。

## API Gateway 源
<a name="api-gateway-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为 API Gateway 源预配置的源设置。

**源设置（预配置）**
+ **协议**：仅限 HTTPS
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：无
+ **来源访问控制（仅限控制台）**：CloudFront 为您设定此设置
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为 API Gateway 源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存策略**：`CachingDisabled`（可能的值：`UseOriginCacheControlHeaders`、`UseOriginCacheControlHeaders-QueryStrings`）
+ **源请求策略**：`AllViewerExceptHostHeader`（可能的值：`AllViewer`、`AllViewerandCloudFrontHeaders-2022-06`）
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

以下是您可以在多租户分配中为 API Gateway 源自定义的设置。

**可自定义的设置**
+ **启用源护盾**：（默认值：否）
+ **自动压缩对象**：（默认值：是）

## 自定义源和 EC2 实例
<a name="custom-ec2-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为自定义源预配置的源设置。

**源设置（预配置）**
+ **协议**：匹配查看器
+ **HTTP 端口**：80
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：无
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为自定义源和 EC2 实例预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存策略**：`UseOriginCacheControlHeaders`（可能的值：`UseOriginCacheControlHeaders-QueryStrings`、`CachingDisabled`、`CacheOptimized`、`CachingOptimizedForUncompressedObjects`）
+ **源请求策略**：`AllViewer`（可能的值：`AllViewerExceptHostHeader`、`AllViewerandCloudFrontHeaders-2022-06`）
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

以下是您可以在多租户分配中为自定义源和 EC2 实例自定义的设置。

**可自定义的设置**
+ **启用源护盾**：（默认值：否）
+ **自动压缩对象**：（默认值：是）
+ **缓存**：（默认值：`Cache by Default`）
  + 如果选择 `Cache by Default`，则使用 `UseOriginCacheControlHeaders` 缓存策略。
  + 如果选择 `Do Not Cache by Default`，则使用 `CachingDisabled` 缓存策略。
+ **在缓存中包含查询字符串**：（默认值：是，如果已选择 `Cache by Default`）
  + 如果已经选择 `Do Not Cache by Default`，然后您选择在缓存中包含查询字符串，则使用 `UseOriginCacheControlHeaders-QueryStrings` 缓存策略。

## 弹性负载均衡源
<a name="elb-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为弹性负载均衡源预配置的源设置。

**源设置（预配置）**
+ **协议**：仅限 HTTPS
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：无
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为弹性负载均衡源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存**：（默认值：`Cache by Default`）
  + 如果选择 `Cache by Default`，则使用 `UseOriginCacheControlHeaders` 缓存策略。
  + 如果选择 `Do Not Cache by Default`，则使用 `CachingDisabled` 缓存策略。
+ **在缓存中包含查询字符串**：（默认值：是，如果已选择 `Cache by Default`）
  + 如果已经选择 `Do Not Cache by Default`，然后您选择在缓存中包含查询字符串，则使用 `UseOriginCacheControlHeaders-QueryStrings` 缓存策略。
+ **源请求策略**：`All Viewer`（可能的值：`AllViewerExceptHostHeader`、`AllViewerandCloudFrontHeaders-2022-06`）
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

以下是您可以在多租户分配中为弹性负载均衡源自定义的设置。

**可自定义的设置**
+ **启用源护盾**：（默认值：否）
+ **自动压缩对象**：（默认值：是）
+ **缓存**：（默认值：`Cache by Default`）
  + 如果选择 `Cache by Default`，则使用 `UseOriginCacheControlHeaders` 缓存策略。
  + 如果选择 `Do Not Cache by Default`，则使用 `CachingDisabled` 缓存策略。
+ **在缓存中包含查询字符串**：（默认值：是，如果已选择 `Cache by Default`）
  + 如果已经选择 `Do Not Cache by Default`，然后您选择在缓存中包含查询字符串，则使用 `UseOriginCacheControlHeaders-QueryStrings` 缓存策略。

## MediaPackage v1 源
<a name="media-package-v1-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为 MediaPackage v1 源预配置的源设置。

**源设置（预配置）**
+ **协议**：仅限 HTTPS
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：可以通过输入 MediaPackage URL 来提供此路径。
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为 MediaPackage v1 源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存策略**：`Elemental-MediaPackage`
+ **源请求策略**：无
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

## MediaPackage v2 源
<a name="media-package-v2-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为 MediaPackage v2 源预配置的源设置。

**源设置（预配置）**
+ **来源访问控制**：CloudFront 为您设定此设置并添加策略
+ **协议**：仅限 HTTPS
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：无
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为 MediaPackage v2 源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存策略**：`Elemental-MediaPackage`
+ **源请求策略**：无
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

## MediaTailor 源
<a name="media-tailor-origin-preconfiguration"></a>

以下是 CloudFront 在多租户分配中为 MediaTailor 源预配置的源设置。

**源设置（预配置）**
+ **协议**：仅限 HTTPS
+ **HTTPS 端口**：443
+ **最低源 SSL 协议**：TLSv1.2
+ **源路径**：可以通过输入 MediaPackage URL 来提供此路径。
+ **添加自定义标头**：无
+ **启用源护盾**：否
+ **连接尝试次数**：3
+ **响应超时**：30
+ **保持连接超时**：5

以下是 CloudFront 在多租户分配中为 MediaTailor 源预配置的缓存设置。

**缓存设置（预配置）**
+ **自动压缩对象**：是
+ **查看器协议策略**：重定向到 HTTPS
+ **支持的 HTTP 方法**：`GET, HEAD`
+ **缓存 HTTP 方法**：否
+ **支持通过 HTTP/2 发出 gRPC 请求**：否
+ **限制查看器访问**：否
+ **缓存策略**：无
+ **源请求策略**：`Elemental-MediaTailor-PersonalizedManifests`
+ **响应标头策略**：无
+ **Smooth Streaming**：否
+ **字段级加密**：否
+ **启用实时访问日志**：否
+ **函数**：否

# 所有分配设置参考
<a name="distribution-web-values-specify"></a>

当您创建或更新分配时，可以选择手动编辑 CloudFront 分配设置。以下是您可以编辑的设置。

但是，CloudFront 根据内容源类型为您配置大多数分配设置。有关更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

有关使用 CloudFront 控制台创建或更新分配的更多信息，请参阅[创建分配](distribution-web-creating-console.md)或[更新分配](HowToUpdateDistribution.md)。

**Topics**
+ [源设置](DownloadDistValuesOrigin.md)
+ [缓存行为设置](DownloadDistValuesCacheBehavior.md)
+ [分配设置](DownloadDistValuesGeneral.md)
+ [自定义错误页面和错误缓存](DownloadDistValuesErrorPages.md)
+ [地理限制](DownloadDistValuesEnableGeoRestriction.md)

# 源设置
<a name="DownloadDistValuesOrigin"></a>

当您使用 CloudFront 控制台创建或更新分配时，您可提供有关一个或多个位置（称为*源*）的信息，它们是您存储原始版 Web 内容的地方。CloudFront 从您的源获取 Web 内容，并通过遍布全球的边缘服务器网络将其提供给查看器。

有关您可以为分配创建的源的当前最大数量或要请求提高限额，请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

如果您想删除源，您首先必须编辑或删除与该源有关的缓存行为。

**重要**  
如果您删除源，请确认该源先前提供的文件在另一源中可用，且您的缓存行为将这些文件的请求路由到新的源。

当您创建或更新分配时，您可为每个源指定以下值。

**Topics**
+ [源域](#DownloadDistValuesDomainName)
+ [协议（仅自定义源）](#DownloadDistValuesOriginProtocolPolicy)
+ [源路径](#DownloadDistValuesOriginPath)
+ [名称](#DownloadDistValuesId)
+ [源访问（仅限 Amazon S3 源）](#DownloadDistValuesOAIRestrictBucketAccess)
+ [添加自定义标头](#DownloadDistValuesOriginCustomHeaders)
+ [启用 Origin Shield](#create-update-fields-origin-shield)
+ [连接尝试次数](#origin-connection-attempts)
+ [连接超时](#origin-connection-timeout)
+ [响应超时](#DownloadDistValuesOriginResponseTimeout)
+ [响应完成超时](#response-completion-timeout)
+ [源保持连接超时（仅自定义源和 VPC 源）](#DownloadDistValuesOriginKeepaliveTimeout)
+ [响应和保持连接超时限额](#response-keep-alive-timeout-quota)

## 源域
<a name="DownloadDistValuesDomainName"></a>

源域是资源的 DNS 域名，CloudFront 将在该资源（例如 Amazon S3 存储桶或 HTTP 服务器）中为源获取对象。例如：
+ **Amazon S3 存储桶** – `amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com`
**注意**  
如果您最近创建了 S3 存储桶，则 CloudFront 分配最长可能需要 24 小时才能返回 `HTTP 307 Temporary Redirect` 响应。S3 存储桶名称最长可能需要 24 小时才能传播到所有 AWS 区域。在传播完成后，分配将自动停止发送这些重定向响应；您无需执行任何操作。有关更多信息，请参阅[为什么我会从 Amazon S3 获得 HTTP 307 临时重定向响应？](https://repost.aws/knowledge-center/s3-http-307-response)和[临时请求重定向](https://docs.aws.amazon.com/AmazonS3/latest/dev/Redirects.html#TemporaryRedirection)。
+ **配置为网站的 Amazon S3 存储桶** – `amzn-s3-demo-bucket.s3-website.us-west-2.amazonaws.com`
+ **MediaStore 容器** – `examplemediastore.data.mediastore.us-west-1.amazonaws.com`
+ **MediaPackage 端点** – `examplemediapackage.mediapackage.us-west-1.amazonaws.com`
+ **Amazon EC2 实例** – `ec2-203-0-113-25.compute-1.amazonaws.com`
+ **Elastic Load Balancing 负载均衡器** – `example-load-balancer-1234567890.us-west-2.elb.amazonaws.com`
+ **您自己的 Web 服务器** – `www.example.com`

在**源域**字段中选择域名或键入域名。必须手动输入来自选择加入区域的资源。域名不区分大小写。源域必须具有可公开解析的 DNS 名称，该名称可通过互联网将请求从客户端路由到目标。

如果将 CloudFront 配置为通过 HTTPS 连接到源，则证书中的其中一个域名必须与您为**源域名**指定的域名匹配。如果没有任何域名匹配，CloudFront 会向查看器返回 HTTP 状态代码 502（无效网关）。有关更多信息，请参阅[CloudFront 分配和证书中的域名](cnames-and-https-requirements.md#https-requirements-domain-names-in-cert)和[CloudFront 与自定义源服务器之间的 SSL/TLS 协商失败](http-502-bad-gateway.md#ssl-negotitation-failure)。

**注意**  
如果使用将查看器主机标头转发到源的源请求策略，则源必须使用与查看器主机标头匹配的证书进行响应。有关更多信息，请参阅 [添加 CloudFront 请求标头](adding-cloudfront-headers.md)。

如果您的源是 Amazon S3 存储桶，请注意以下事项：
+ 如果将存储桶配置为网站，请输入存储桶的 Amazon S3 静态网站托管端点；不要从**源域**字段的列表中选择存储桶名称。该静态网站托管端点显示在 Amazon S3 控制台的**属性**页面中的**静态网站托管**下。有关更多信息，请参阅 [使用配置为网站端点的 Amazon S3 存储桶](DownloadDistS3AndCustomOrigins.md#concept_S3Origin_website)。
+ 如果您已为存储桶配置 Amazon S3 Transfer Acceleration，请不要为**源域**指定 `s3-accelerate` 端点。
+ 如果您要从不同的 AWS 账户使用存储桶，而且该存储桶没有配置为网站，请按以下格式输入名称：

  `bucket-name.s3.region.amazonaws.com` 

  如果存储桶位于美国区域，并且您希望 Amazon S3 将请求路由到位于弗吉尼亚州北部的设施，请使用以下格式：

  `bucket-name.s3.us-east-1.amazonaws.com` 
+ 文件必须公开可读，除非您使用 CloudFront 源访问控制确保 Amazon S3 中内容的安全。有关访问控制的更多信息，请参阅[限制对 Amazon S3 源的访问](private-content-restricting-access-to-s3.md)。

**重要**  
如果源是 Amazon S3 存储桶，存储桶名称必须符合 DNS 命名要求。有关更多信息，请转至《Amazon Simple Storage Service 用户指南》**中的[桶限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

当您更改源的**源域**值时，CloudFront 立即开始复制对 CloudFront 边缘站点的更改。在特定边缘站点中的分配配置得到更新之前，CloudFront 会继续将请求转发到先前的源。该边缘站点中的分配配置一经更新，CloudFront 就开始将请求转发到新的源。

更改源并不要求 CloudFront 用新源中的对象重新填充边缘缓存。只要应用程序中的查看器请求未经更改，CloudFront 就会继续提供边缘缓存中已有的对象，直至每个对象的 TTL 过期或直至很少被请求的对象被逐出。

## 协议（仅自定义源）
<a name="DownloadDistValuesOriginProtocolPolicy"></a>

**注意**  
这仅适用于自定义源。

您希望 CloudFront 在从源获取对象时要使用的协议策略。

选择以下任一值：
+ **仅 HTTP**：CloudFront 仅使用 HTTP 访问源。
**重要**  
当源是 Amazon S3 静态网站托管端点时，**仅 HTTP** 是默认设置，因为 Amazon S3 不支持对静态网站托管端点使用 HTTPS 连接。CloudFront 控制台不支持更改 Amazon S3 静态网站托管终端的此设置。
+ **仅 HTTPS**：CloudFront 仅使用 HTTPS 访问源。
+ **匹配查看器**：CloudFront 使用 HTTP 或 HTTPS 与源进行通信，具体取决于查看器请求的协议。请注意，CloudFront 仅缓存对象一次，即使查看器使用 HTTP 和 HTTPS 协议发出请求也是如此。
**重要**  
对于 CloudFront 转发到该源的 HTTPS 查看器请求，源服务器上的 SSL/TLS 证书中的域名之一必须与为**源域**指定的域名匹配。否则，CloudFront 将使用 HTTP 状态代码 502（无效网关）响应查看器请求，而不是返回请求的对象。有关更多信息，请参阅 [在 CloudFront 中使用 SSL/TLS 证书的要求](cnames-and-https-requirements.md)。

**Topics**
+ [HTTP 端口](#DownloadDistValuesHTTPPort)
+ [HTTPS 端口](#DownloadDistValuesHTTPSPort)
+ [最低限度源 SSL 协议](#DownloadDistValuesOriginSSLProtocols)

### HTTP 端口
<a name="DownloadDistValuesHTTPPort"></a>

**注意**  
这仅适用于自定义源。

（可选）您可以指定自定义源进行侦听的 HTTP 端口。有效值包括端口 80、443 和 1024 至 65535。默认值为端口 80。

**重要**  
当源是 Amazon S3 静态网站托管端点时，端口 80 是默认设置，因为 Amazon S3 仅对静态网站托管端点支持端口 80。CloudFront 控制台不支持更改 Amazon S3 静态网站托管终端的此设置。

### HTTPS 端口
<a name="DownloadDistValuesHTTPSPort"></a>

**注意**  
这仅适用于自定义源。

（可选）您可以指定自定义源进行侦听的 HTTPS 端口。有效值包括端口 80、443 和 1024 至 65535。默认值为端口 443。当**协议**设置为**仅 HTTP** 时，不能为 **HTTPS 端口**指定值。

### 最低限度源 SSL 协议
<a name="DownloadDistValuesOriginSSLProtocols"></a>

**注意**  
这仅适用于自定义源。

选择 CloudFront 在建立与您的源的 HTTPS 连接时可以使用的最低限度 TLS/SSL 协议。降低 TLS 协议级别会降低安全性，因此建议您选择您的源支持的最新 TLS 协议。当**协议**设置为**仅 HTTP** 时，不能为**最低限度源 SSL 协议**指定值。

如果您使用 CloudFront API 设置 CloudFront 要使用的 TLS/SSL 协议，则无法设置最低限度协议。而是要指定 CloudFront 可以用于您的源的所有 TLS/SSL 协议。有关更多信息，请参阅《Amazon CloudFront API 参考》**中的 [OriginSslProtocols](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_OriginSslProtocols.html)。

## 源路径
<a name="DownloadDistValuesOriginPath"></a>

如果您希望 CloudFront 从源的目录中请求内容，请以斜杠 (/) 开头输入目录路径。CloudFront 会将目录路径附加到**源域**的值之后，例如 **cf-origin.example.com/production/images**。请不要在路径的末尾添加斜杠 (/)。

例如，假设您已为分配指定以下值：
+ **源域** – 名为 **amzn-s3-demo-bucket** 的 Amazon S3 存储桶
+ **源路径** – **/production**
+ **备用域名 (CNAME)**–**example.com** 

当用户在浏览器中输入 `example.com/index.html` 时，CloudFront 会将请求发送到 `amzn-s3-demo-bucket/production/index.html` 的 Amazon S3。

当用户在浏览器中输入 `example.com/acme/index.html` 时，CloudFront 会将请求发送到 `amzn-s3-demo-bucket/production/acme/index.html` 的 Amazon S3。

## 名称
<a name="DownloadDistValuesId"></a>

名称是唯一标识此分配中的这个源的字符串。如果您创建默认缓存行为之外的缓存行为，可以使用在此处指定的名称，以标识您希望 CloudFront 在请求与该缓存行为的路径模式匹配时将请求路由到的源。

## 源访问（仅限 Amazon S3 源）
<a name="DownloadDistValuesOAIRestrictBucketAccess"></a>

**注意**  
这仅适用于 Amazon S3 存储桶源（*不*使用 S3 静态网站端点的那些源）。

如果您想将对 Amazon S3 存储桶源的访问限制为仅限特定的 CloudFront 分配，请选择**来源访问控制设置(推荐)**。

如果 Amazon S3 存储桶源可公开访问，请选择**公有**。

有关更多信息，请参阅 [限制对 Amazon S3 源的访问](private-content-restricting-access-to-s3.md)。

有关如何要求用户仅使用 CloudFront URL 访问自定义源上的对象的信息，请参阅[在自定义源上限制对文件的访问](private-content-overview.md#forward-custom-headers-restrict-access)。

## 添加自定义标头
<a name="DownloadDistValuesOriginCustomHeaders"></a>

如果您希望 CloudFront 在将请求发送到源时添加自定义标头，请指定标头名称及其值。有关更多信息，请参阅 [向源请求添加自定义标头](add-origin-custom-headers.md)。

有关可添加的自定义标头的当前最大数量、自定义标头名称和值的最大长度，以及所有标头名称和值的最大总长度，请参阅[配额](cloudfront-limits.md)。

## 启用 Origin Shield
<a name="create-update-fields-origin-shield"></a>

选择**是**以启用 CloudFront Origin Shield。有关 Origin Shield 的更多信息，请参阅[使用 Amazon CloudFront Origin Shield](origin-shield.md)。

## 连接尝试次数
<a name="origin-connection-attempts"></a>

您可以设置 CloudFront 尝试连接到源的次数。您可以指定 1、2 或 3 作为尝试次数。默认次数（如果您没有另行指定）为 3。

将此设置与**连接超时**一起使用，可指定 CloudFront 在尝试连接到辅助源或向查看器返回错误响应之前等待多长时间。默认情况下，CloudFront 在尝试连接到辅助源或返回错误响应之前等待长达 30 秒（3 次尝试，每次 10 秒）。您可以通过指定更少的尝试次数、更短的连接超时或两者来减少此时间。

如果指定次数的连接尝试失败，CloudFront 执行以下操作之一：
+ 如果源是源组的一部分，CloudFront 尝试连接到辅助源。如果指定次数的连接尝试失败，则 CloudFront 向查看器返回错误响应。
+ 如果源不是源组的一部分，则 CloudFront 向查看器返回错误响应。

对于自定义源（包括配置了静态网站托管的 Amazon S3 存储桶），此设置还指定 CloudFront 尝试从源获取响应的次数。有关更多信息，请参阅 [响应超时](#DownloadDistValuesOriginResponseTimeout)。

## 连接超时
<a name="origin-connection-timeout"></a>

连接超时是 CloudFront 在尝试建立与源的连接时等待的秒数。您可以指定 1 到 10 之间（含）的秒数。默认超时（如果您没有另行指定）为 10 秒。

将此设置与**连接尝试次数**一起使用，可指定 CloudFront 在尝试连接到辅助源或向查看器返回错误响应之前等待多长时间。默认情况下，CloudFront 在尝试连接到辅助源或返回错误响应之前等待长达 30 秒（3 次尝试，每次 10 秒）。您可以通过指定更少的尝试次数、更短的连接超时或两者来减少此时间。

如果 CloudFront 未在指定的秒数内建立到源的连接，CloudFront 执行以下操作之一：
+ 如果指定的**连接尝试次数**超过 1，CloudFront 将再次尝试建立连接。CloudFront 最多尝试 3 次，具体取决**连接尝试次数**的值。
+ 如果所有连接尝试都失败，并且源是源组的一部分，则 CloudFront 尝试连接到辅助源。如果指定次数的连接尝试失败，则 CloudFront 向查看器返回错误响应。
+ 如果所有连接尝试都失败，且源不是源组的一部分，则 CloudFront 向查看器返回错误响应。

## 响应超时
<a name="DownloadDistValuesOriginResponseTimeout"></a>

来源响应超时（也称为*来源读取超时* 或*来源请求超时*）适用于以下两个值：
+ CloudFront 在将请求转发到源后等待响应的时间长度（以秒为单位）。
+ CloudFront 从收到来自源的一个响应数据包到收到下一个数据包之间等待的时间长度（以秒为单位）。

**提示**  
如果您由于查看器遇到了 HTTP 504 状态代码错误而希望增加超时值，请考虑探索其他方法来在更改超时值之前消除这些错误。请参阅 [HTTP 504 状态代码 (Gateway Timeout)](http-504-gateway-timeout.md) 中的故障排除建议。

CloudFront 行为取决于查看器请求中的 HTTP 方法：
+ `GET` 和 `HEAD` 请求 – 如果源在响应超时的持续时间内没有响应或停止响应，则 CloudFront 中断连接。CloudFront 根据 [连接尝试次数](#origin-connection-attempts) 的值再次尝试进行连接。
+ `DELETE`、`OPTIONS`、`PATCH`、`PUT` 和 `POST` 请求 – 如果源在读取超时期间未响应，CloudFront 将中断连接并且不会再次尝试联系源。如有必要，客户端可以重新提交请求。

## 响应完成超时
<a name="response-completion-timeout"></a>

**注意**  
响应完成超时不支持[持续部署](continuous-deployment.md)功能。

从 CloudFront 向源发出的请求可以保持打开状态并等待响应的时间（以秒为单位）。如果此时未收到来自源的完整响应，CloudFront 将终止连接。

与**响应超时**（即*各个*响应数据包的等待时间）不同，**响应完成超时**是 CloudFront 等待响应完成的*最大*允许时间量。您可以使用此设置来确保 CloudFront 不会无限期等待缓慢或无响应的源，即使其它超时设置支持等待更长的时间也是如此。

此最大超时包括您为其它超时设置指定的时间以及每次重试的**连接尝试**次数。您可以同时使用这些设置来指定 CloudFront 等待完整请求的时间以及何时结束请求，而无论请求是否完成。

例如，如果您设置了以下设置：
+ **连接尝试次数**为 3
+ **连接超时**为 10 秒
+ **响应超时**为 30 秒
+ **响应完成超时**为 60 秒

这意味着 CloudFront 将尝试连接到源（总尝试次数最多为 3 次），每次连接尝试超时为 10 秒。连接后，CloudFront 将等待 30 秒来让源响应请求，直到它收到响应的最后一个数据包。

无论连接尝试次数或响应超时如何，如果来自源的完整响应的完成时间超过 60 秒，CloudFront 都将终止连接。然后，如果您指定了 [HTTP 504 状态代码 (Gateway Timeout)](http-504-gateway-timeout.md)错误响应或自定义错误响应，CloudFront 将向查看器返回此类错误响应。

**备注**  
如果您为响应完成超时设置了一个值，则该值必须等于或大于[响应超时值（源读取超时）](#DownloadDistValuesOriginResponseTimeout)。
如果您没有为响应完成超时设置值，CloudFront 不会强制执行最大值。

## 源保持连接超时（仅自定义源和 VPC 源）
<a name="DownloadDistValuesOriginKeepaliveTimeout"></a>

保持连接超时是 CloudFront 在获取最后一个响应数据包后，尝试保持与自定义源的连接的时间长度（以秒为单位）。保持持久性连接可节省重新建立 TCP 连接和执行后续请求的另一个 TLS 握手所需的时间。增加保持连接超时有助于改善分配的每连接请求指标。

**注意**  
为了让**源保持连接超时**值生效，源必须配置为允许持久性连接。

## 响应和保持连接超时限额
<a name="response-keep-alive-timeout-quota"></a>
+ [响应超时](#DownloadDistValuesOriginResponseTimeout)的默认值为 30 秒。
+ [保持连接超时](#DownloadDistValuesOriginKeepaliveTimeout)的默认值为 5 秒。

如果您为您的 AWS 账户请求延长超时，请更新分配源，使其具有您所需的响应超时和保持连接超时值。为账户提升限额并不会自动更新您的源。例如，如果您使用 Lambda@Edge 函数将保持连接超时设置为 90 秒，则您的源的保持连接超时值必须为 90 秒或更长时间。否则，您的 Lambda@Edge 函数可能会无法执行。

有关分配配额的更多信息，包括如何请求提高配额，请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

# 缓存行为设置
<a name="DownloadDistValuesCacheBehavior"></a>

通过设置缓存行为，您可以为您网站上文件的特定 URL 路径模式配置各种 CloudFront 功能。例如，一个缓存行为可能适用于您用作 CloudFront 源服务器的 Web 服务器上 `.jpg` 目录中所有的 `images` 文件。您可为每个缓存行为配置的功能包括：
+ 路径模式
+ 如果您已经为 CloudFront 分配配置了多个源，则为您希望 CloudFront 将您的请求转发到的源
+ 是否将查询字符串转发到源
+ 访问指定文件是否需要签名的 URL
+ 是否要求用户使用 HTTPS 访问这些文件
+ 这些文件保留在 CloudFront 缓存中的最短时间，不管您的源添加到文件中的任何 `Cache-Control` 标头的值

当您创建新分配时，您为默认缓存行为指定设置，这将自动把所有请求转发到您创建分配时指定的源中。在创建分配后，您可创建其他缓存行为，该行为定义 CloudFront 在其接受与路径模式相匹配的对象请求时如何响应，例如 `*.jpg`。如果您创建其他缓存行为，默认缓存行为始终是最后一个被处理的。其他缓存行为以他们在 CloudFront 控制台中所列的顺序进行处理，或者，如果您使用 CloudFront API，以他们在分配 `DistributionConfig` 元素中所列的顺序进行处理。有关更多信息，请参阅 [路径模式](#DownloadDistValuesPathPattern)。

当您创建缓存行为是，可指定您希望 CloudFront 从中获取对象的一个源。因此，如果您希望 CloudFront 分配所有源的对象，必须至少具有与您所拥有的源一样多的缓存行为（包括默认缓存行为）。例如，如果您有两个源但只有一个默认缓存行为，则默认缓存行为将导致 CloudFront 从其中一个源获取对象，但永远不会使用另一个源。

有关您可以添加到分配的当前最大缓存行为数，或要请求提高配额（以前称为限制），请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

**Topics**
+ [路径模式](#DownloadDistValuesPathPattern)
+ [源或源组](#DownloadDistValuesTargetOriginId)
+ [查看器协议策略](#DownloadDistValuesViewerProtocolPolicy)
+ [允许的 HTTP 方法](#DownloadDistValuesAllowedHTTPMethods)
+ [字段级加密 Config](#DownloadDistValuesFieldLevelEncryption)
+ [缓存的 HTTP 方法](#DownloadDistValuesCachedHTTPMethods)
+ [允许通过 HTTP/2 发出 gRPC 请求](#enable-grpc-distribution)
+ [基于选择的请求标头进行缓存](#DownloadDistValuesForwardHeaders)
+ [允许列表标头](#DownloadDistValuesAllowlistHeaders)
+ [对象缓存](#DownloadDistValuesObjectCaching)
+ [最小 TTL](#DownloadDistValuesMinTTL)
+ [最大 TTL](#DownloadDistValuesMaxTTL)
+ [默认 TTL](#DownloadDistValuesDefaultTTL)
+ [转发 Cookie](#DownloadDistValuesForwardCookies)
+ [允许列表 Cookie](#DownloadDistValuesAllowlistCookies)
+ [查询字符串转发和缓存](#DownloadDistValuesQueryString)
+ [查询字符串允许列表](#DownloadDistValuesQueryStringAllowlist)
+ [Smooth Streaming](#DownloadDistValuesSmoothStreaming)
+ [限制查看器访问（使用签名 URL 或签名 Cookie）](#DownloadDistValuesRestrictViewerAccess)
+ [可信签署人](#DownloadDistValuesTrustedSigners)
+ [AWS 账户 数字](#DownloadDistValuesAWSAccountNumbers)
+ [自动压缩对象](#DownloadDistValuesCompressObjectsAutomatically)
+ [CloudFront 事件](#DownloadDistValuesEventType)
+ [Lambda 函数 ARN](#DownloadDistValuesLambdaFunctionARN)
+ [包含正文](#include-body)

## 路径模式
<a name="DownloadDistValuesPathPattern"></a>

路径模式（例如，`images/*.jpg`）指定您希望该缓存行为所适用的请求。CloudFront 收到查看器请求时，会按照缓存行为在分配中列出的顺序，将请求路径与路径模式进行比较。第一个匹配者决定了哪个缓存行为适用于该请求。例如，假设您具有以下三个路径模式的三个缓存行为，顺序如下：
+ `images/*.jpg`
+ `images/*`
+ `*.gif`

**注意**  
可以选择在路径模式的开头包含斜杠 (/)，例如 `/images/*.jpg`。无论开头是否有 /，CloudFront 行为都相同。如果您未在路径的开头指定 /，则会自动隐含此字符；无论开头是否有 /，CloudFront 都会以相同方式处理该路径。例如，CloudFront 将 `/*product.jpg` 视为与 `*product.jpg` 相同

文件 `images/sample.gif` 的请求不符合第一个路径模式，因此，相关的缓存行为不适用于该请求。文件符合第二路径模式，因此，与第二个路径模式有关的缓存行为适用，即使该请求与第三个路径模式也匹配。

**注意**  
在创建新的分配时，默认缓存行为的**路径模式**的值将设置为 **\$1**（所有文件）且无法更改。此值导致 CloudFront 将您对象的所有请求转发到您在 [源域](DownloadDistValuesOrigin.md#DownloadDistValuesDomainName) 字段中指定的源。如果对象的请求与任何其他缓存行为的路径模式都不匹配，CloudFront 将应用您在默认缓存行为中指定的行为。

**重要**  
请谨慎定义路径模式及其顺序，否则您可能会向用户提供非预期的内容访问权限。例如，假设请求匹配两个缓存行为的路径模式。第一个缓存行为不要求签名 URL，而第二个缓存行为要求签名 URL。用户无需使用签名 URL 即可访问对象，因为 CloudFront 处理与第一个匹配有关的缓存行为。

如果您正在使用 MediaPackage 通道，则必须为您为源的端点类型定义的缓存行为包含特定的路径模式。例如，对于 DASH 端点，为**路径模式**键入 `*.mpd`。有关更多信息和具体说明，请参阅[提供使用 AWS Elemental MediaPackage 格式化的实时视频](live-streaming.md#live-streaming-with-mediapackage)。

您指定的路径适用于指定目录以及该指定目录下所有子目录中所有文件的请求。在评估路径模式时，CloudFront 不会考虑查询字符串或 Cookie。例如，如果 `images` 目录包含 `product1` 和 `product2` 子目录，此路径模式 `images/*.jpg` 适用于 `images`、`images/product1` 和 `images/product2` 目录中任何 .jpg 文件的请求。如果您希望将不同的缓存行为应用于 `images/product1` 目录中的文件而非 `images` 和 `images/product2` 目录中文件，为 `images/product1` 创建单独的缓存行为，并将该缓存行为移到 `images` 目录中缓存行为上方 (前面) 的位置。

您可在路径模式中使用以下通配符：
+ `*` 匹配 0 或多个字符。
+ `?` 精准匹配 1 个字符。

以下示例展示了通配符如何工作：


****  

| 路径模式 | 与路径模式匹配的文件 | 
| --- | --- | 
|  `*.jpg`  |  所有 .jpg 文件。  | 
|  `images/*.jpg`  |  `images` 目录及该 `images` 目录下子目录中的所有 .jpg 文件。  | 
|  `a*.jpg`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesCacheBehavior.html)  | 
|  `a??.jpg`  |  文件名以 `a` 开头且随后紧跟两个其他字符的所有 .jpg 文件，例如，`ant.jpg` 和 `abe.jpg`。  | 
|  `*.doc*`  |  文件扩展名以 `.doc` 开头的所有文件，例如，`.doc`、`.docx` 和 `.docm` 文件。在这种情况下，您不能使用路径模式 `*.doc?`，因为该路径模式不适用于 `.doc` 文件的请求；`?` 通配符精确替换一个字符。  | 

路径模式的长度上限是 255 个字符。该值可包含以下任何字符：
+ A-Z, a-z

  路径模式区分大小写，因此，路径模式 `*.jpg` 不适用于文件 `LOGO.JPG`。
+ 0-9
+ \$1 - . \$1 \$1 / \$1 " ' @ : \$1
+ &，作为 `&amp;` 传递和返回

### 路径规范化
<a name="path-normalization"></a>

CloudFront 对 URI 路径进行了与 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986#section-6) 一致的规范化，然后将该路径与正确的缓存行为进行匹配。缓存行为匹配后，CloudFront 会将原始 URI 路径发送到源。如果它们不匹配，则请求会改为与您的默认缓存行为进行匹配。

会对某些字符进行规范化并从路径中删除它们，例如多个斜杠（`//`）或句点（`..`）。这可能会更改 CloudFront 用于匹配预期缓存行为的 URL。

**Example 示例**  
您可以为缓存行为指定 `/a/b*` 和 `/a*` 路径。  
+ 发送 `/a/b?c=1` 路径的查看器将与 `/a/b*` 缓存行为进行匹配。
+ 发送 `/a/b/..?c=1` 路径的查看器将与 `/a*` 缓存行为进行匹配。

要解决规范化路径的问题，您可以更新请求路径或缓存行为的路径模式。

## 源或源组
<a name="DownloadDistValuesTargetOriginId"></a>

此设置仅在您为现有分配创建或更新缓存行为时才适用。

输入现有源或源组的值。该值标识当请求（如 https://example.com/logo.jpg）与缓存行为（如 \$1.jpg）或默认缓存行为 (\$1) 的路径模式匹配时，您希望 CloudFront 将请求路由至的源或源组。

## 查看器协议策略
<a name="DownloadDistValuesViewerProtocolPolicy"></a>

选择您希望查看器用来访问 CloudFront 边缘站点中的内容的协议策略：
+ **HTTP 和 HTTPS**：查看器可使用两种协议。
+ **将 HTTP 重定向到 HTTPS**：查看器可使用两种协议，但 HTTP 请求将自动重定向到 HTTP 请求。
+ **仅 HTTPS**：如果查看器使用了 HTTPS，则只能访问您的内容。

有关更多信息，请参阅 [要求在查看器和 CloudFront 之间使用 HTTPS 进行通信](using-https-viewers-to-cloudfront.md)。

## 允许的 HTTP 方法
<a name="DownloadDistValuesAllowedHTTPMethods"></a>

指定您希望 CloudFront 处理并转发到源的 HTTP 方法：
+ **GET、HEAD：**您只能使用 CloudFront 获取您源中的对象或获取对象标头。
+ **GET、HEAD、OPTIONS：**您只能使用 CloudFront 从源获取对象、获取对象标头或检索您的源服务器支持的选项列表。
+ **GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE：**您可以使用 CloudFront 获取、添加、更新和删除对象以及获取对象标头。此外，您可以执行其他 POST 操作，例如从 Web 表格提交数据。
**注意**  
如果您在工作负载中使用 gRPC，则必须选择 **GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE**。gRPC 工作负载需要 `POST` 方法。有关更多信息，请参阅 [将 gRPC 与 CloudFront 分配结合使用](distribution-using-grpc.md)。  
CloudFront 将缓存对 `GET` 和 `HEAD` 请求以及（可选）`OPTIONS` 请求的响应。对 `OPTIONS` 请求的响应与对 `GET` 和 `HEAD` 请求的响应单独缓存（`OPTIONS` 方法包含在 `OPTIONS` 请求的[缓存键](understanding-the-cache-key.md)中）。CloudFront 不缓存对使用其他方法的请求的响应。

**重要**  
如果您选择 **GET, HEAD, OPTIONS** 或 **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**，则可能需要限制对 Amazon S3 存储桶或自定义源的访问，以阻止用户执行您不希望他们执行的操作。以下示例说明了如何限制访问：  
**如果将 Amazon S3 作为您的分配的源**：创建 CloudFront 源访问控制，以限制对您的 Amazon S3 内容的访问，并为源访问控制授予权限。例如，如果您*只是* 因为想要使用 `PUT` 而将 CloudFront 配置为接受并转发这些方法，则仍必须配置 Amazon S3 存储桶策略以适当处理 `DELETE` 请求。有关更多信息，请参阅 [限制对 Amazon S3 源的访问](private-content-restricting-access-to-s3.md)。
**如果您使用自定义源：**配置源服务器以处理所有方法。例如，您将 CloudFront 配置为接受并转发这些方法*只是*因为您想要使用 `POST`，则仍必须配置您的源服务器以适当处理 `DELETE` 请求。

## 字段级加密 Config
<a name="DownloadDistValuesFieldLevelEncryption"></a>

如果您要对特定数据字段强制实施字段级加密，请在下拉列表中选择一个字段级加密配置。

有关更多信息，请参阅 [使用字段级加密帮助保护敏感数据](field-level-encryption.md)。

## 缓存的 HTTP 方法
<a name="DownloadDistValuesCachedHTTPMethods"></a>

指定您是否希望 CloudFront 在查看器提交 `OPTIONS` 请求时缓存来自源的响应。CloudFront 始终缓存对 `GET` 和 `HEAD` 请求的响应。

## 允许通过 HTTP/2 发出 gRPC 请求
<a name="enable-grpc-distribution"></a>

指定是否希望您的分配允许 gRPC 请求。要启用 gRPC，请选择以下设置：
+ 对于**[允许的 HTTP 方法](#DownloadDistValuesAllowedHTTPMethods)**，请选择 **GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE** 方法。gRPC 需要 `POST` 方法。
+ 选择 `POST` 方法后，选中出现的 gRPC 复选框。
+ 对于 **[支持的 HTTP 版本](DownloadDistValuesGeneral.md#DownloadDistValuesSupportedHTTPVersions)**，请选择 **HTTP/2**。

有关更多信息，请参阅 [将 gRPC 与 CloudFront 分配结合使用](distribution-using-grpc.md)。

## 基于选择的请求标头进行缓存
<a name="DownloadDistValuesForwardHeaders"></a>

指定您是否要 CloudFront 基于指定标头的值缓存对象：
+ **无(改进缓存)** – CloudFront 不根据标头值缓存您的对象。
+ **允许列表** – CloudFront 仅根据指定标头的值缓存您的对象。使用**允许列表标头**选择您希望 CloudFront 进行缓存时所基于的标头。
+ **所有** – CloudFront 不缓存与该缓存行为关联的对象。相反，CloudFront 会将每个请求发送到源。（不建议用于 Amazon S3 源。）

无论您选择哪个选项，CloudFront 都会将特定标头转发到您的源并根据您转发的标头执行特定操作。有关 CloudFront 如何处理标头转发的更多信息，请参阅[HTTP 请求标头和 CloudFront 行为（自定义源和 Amazon S3 源）](RequestAndResponseBehaviorCustomOrigin.md#request-custom-headers-behavior)。

有关如何使用请求标头在 CloudFront 中配置缓存的更多信息，请参阅[根据请求标头缓存内容](header-caching.md)。

## 允许列表标头
<a name="DownloadDistValuesAllowlistHeaders"></a>

此设置仅在您为**基于选择的请求标头进行缓存**选择**允许列表**时才适用。

指定您希望 CloudFront 在缓存对象时考虑的标头。从可用标头列表中选择标头，然后选择**添加**。要转发自定义标头，请在字段中输入标头的名称，然后选择**添加自定义标头**。

有关您可以为每个缓存行为列入允许列表的当前最大标头数，或者要请求提高配额（以前称为限制），请参阅[标头的配额](cloudfront-limits.md#limits-custom-headers)。

## 对象缓存
<a name="DownloadDistValuesObjectCaching"></a>

如果源服务器将 `Cache-Control` 标头添加到对象以控制在 CloudFront 缓存中保留对象的时间长度，并且您不希望更改 `Cache-Control` 值，请选择**使用源缓存标头**。

要指定在 CloudFront 缓存中保留对象的最短时间和最长时间（不管 `Cache-Control` 标头如何）以及在缺少 `Cache-Control` 标头时在 CloudFront 缓存中保留对象的默认时间，请选择**自定义**。然后，在**最小 TTL**、**默认 TTL** 和**最大 TTL** 字段中指定值。

有关更多信息，请参阅 [管理内容保留在缓存中的时间长度（过期）](Expiration.md)。

## 最小 TTL
<a name="DownloadDistValuesMinTTL"></a>

指定您希望对象在 CloudFront 缓存中保留的最短时间（以秒为单位），在此时间之后，CloudFront 会向源发送另一个请求以确定此对象是否已更新。

**警告**  
如果最小 TTL 大于 0，CloudFront 将至少在缓存策略的最小 TTL 中指定的持续时间内缓存内容，即使源标头中存在 `Cache-Control: no-cache`、`no-store` 或 `private` 指令也是如此。

有关更多信息，请参阅 [管理内容保留在缓存中的时间长度（过期）](Expiration.md)。

## 最大 TTL
<a name="DownloadDistValuesMaxTTL"></a>

指定您希望在 CloudFront 查询您的源以了解对象是否已更新之前，对象保留在 CloudFront 缓存中的最大时长（以秒为单位）。您为**最大 TTL** 指定的值仅在源向对象添加 HTTP 标头 (例如 `Cache-Control max-age`、`Cache-Control s-maxage` 或 `Expires`) 时适用。有关更多信息，请参阅 [管理内容保留在缓存中的时间长度（过期）](Expiration.md)。

要指定 **Maximum TTL** 的值，您必须为 **Object Caching** 设置选择 **Customize** 选项。

**最大 TTL** 的默认值为 31536000 秒（一年）。如果您将**最小 TTL** 或**默认 TTL** 的值更改为一个大于 31536000 秒的值，则**最大 TTL** 的默认值将变为**默认 TTL** 的值。

## 默认 TTL
<a name="DownloadDistValuesDefaultTTL"></a>

指定您希望对象在 CloudFront 缓存中保留的默认时间（以秒为单位），在此时间之后，CloudFront 会向您的源转发另一个请求以确定此对象是否已更新。您为**默认 TTL** 指定的值仅在源*不*向对象添加 HTTP 标头（例如 `Cache-Control max-age`、`Cache-Control s-maxage` 或 `Expires`）时才适用。有关更多信息，请参阅 [管理内容保留在缓存中的时间长度（过期）](Expiration.md)。

要指定**默认 TTL** 的值，您必须为**对象缓存**设置选择**自定义**选项。

**默认 TTL** 的默认值为 86400 秒（一天）。如果您将**最小 TTL** 的值更改为一个大于 86400 秒的值，则**默认 TTL** 的默认值将更改为**最小 TTL** 的值。

## 转发 Cookie
<a name="DownloadDistValuesForwardCookies"></a>

**注意**  
对于 Amazon S3 源，此选项仅适用于配置为网站端点的存储桶。

指定是否希望 CloudFront 转发 Cookie 到您的源服务器，以及指定转发哪些 Cookie。如果您选择仅转发选定的 Cookie（Cookie 允许列表），请在**允许列表 Cookie** 字段中输入 Cookie 名称。如果选择**全部**，不管您的应用程序使用多少，CloudFront 都会转发所有 Cookie。

Amazon S3 不处理 Cookie，且将 Cookie 转发到来源会降低缓存能力。对于将请求转发到 Amazon S3 源的缓存行为，请对**转发 Cookie** 选择**无**。

有关转发 cookie 到源的更多信息，请转至 [根据 Cookie 缓存内容](Cookies.md)。

## 允许列表 Cookie
<a name="DownloadDistValuesAllowlistCookies"></a>

**注意**  
对于 Amazon S3 源，此选项仅适用于配置为网站端点的存储桶。

如果您在**转发 Cookie** 列表中选择**允许列表**，请在**允许列表 Cookie** 字段中输入您希望 CloudFront 为该缓存行为转发到原始服务器的 Cookie 的名称。在新一行中输入每个 Cookie 的名称。

可以使用以下通配符来指定 Cookie 名称：
+ **\$1** 匹配 Cookie 名称中的 0 个或多个字符
+ **?** 与 Cookie 名称中的 1 个字符完全匹配

例如，假设对象的查看器请求包含一个带以下名称的 Cookie：

`userid_member-number`

其中，您的每个用户均具有一个唯一的 *member-number* 值。您希望 CloudFront 为每个成员缓存对象的单独版本。您可以通过将所有 Cookie 转发到源来完成该操作，但查看器请求包含一些您希望 CloudFront 不要缓存的 Cookie。或者，您也可以指定以下值以作为 Cookie 名称，这会导致 CloudFront 将所有以 `userid_` 开头的 Cookie 转发到源：

`userid_*`

有关您可以为每个缓存行为列入允许列表的当前最大 cookie 名称数，或者要请求提高配额（以前称为限制），请参阅[Cookies 的配额（旧缓存设置）](cloudfront-limits.md#limits-allowlisted-cookies)。

## 查询字符串转发和缓存
<a name="DownloadDistValuesQueryString"></a>

CloudFront 可根据查询字符串参数的值来缓存不同版本的内容。请选择以下任一选项：

**无(改进缓存)**  
如果无论查询字符串参数的值如何，源都返回相同版本的对象，请选择该选项。这增加了 CloudFront 可从缓存满足请求的可能性，这提高了性能并降低了源的负载。

**全部转发，基于允许列表进行缓存**  
如果源服务器根据一个或多个查询字符串参数返回不同版本的对象，请选择该选项。然后，在 [查询字符串允许列表](#DownloadDistValuesQueryStringAllowlist) 字段中指定您希望 CloudFront 作为缓存基础的参数。

**全部转发，基于所有进行缓存**  
如果源服务器为所有查询字符串参数返回不同版本的对象，请选择该选项。

有关基于查询字符串参数进行缓存的更多信息（包括如何改进性能），请参阅[根据查询字符串参数缓存内容](QueryStringParameters.md)。

## 查询字符串允许列表
<a name="DownloadDistValuesQueryStringAllowlist"></a>

此设置仅在您为 [查询字符串转发和缓存](#DownloadDistValuesQueryString) 选择**全部转发，基于允许列表进行缓存**时才适用。您可以指定您希望 CloudFront 用作缓存基础的查询字符串参数。

## Smooth Streaming
<a name="DownloadDistValuesSmoothStreaming"></a>

如果您希望以 Microsoft Smooth Streaming 格式分发媒体文件并且您没有 IIS 服务器，则选择**是**。

如果您有 Microsoft IIS 服务器并且要将其用作以 Microsoft Smooth Streaming 格式分发媒体文件的源，或者您不打算分发 Smooth Streaming 媒体文件，则选择**否**。

**注意**  
如果您指定**是**，您仍可以使用该缓存行为分配其他内容，只要该内容与**路径模式**值匹配。

有关更多信息，请参阅 [为 Microsoft Smooth Streaming 配置点播视频](on-demand-video.md#on-demand-streaming-smooth)。

## 限制查看器访问（使用签名 URL 或签名 Cookie）
<a name="DownloadDistValuesRestrictViewerAccess"></a>

如果您希望与该缓存行为的 `PathPattern` 匹配的对象请求使用公共 URL，请选择 **No**。

如果您希望与该缓存行为的 `PathPattern` 匹配的对象请求使用签名 URL，请选择 **Yes**。然后指定您希望用于创建签名 URL 的 AWS 账户；这些账户被称为可信签署人。

有关可信签署人的更多信息，请参阅[指定可以创建签名 URL 和签名 Cookie 的签署人](private-content-trusted-signers.md)。

## 可信签署人
<a name="DownloadDistValuesTrustedSigners"></a>

仅在您为**限制查看器访问（使用签名的 URL 或签名的 Cookie）**选择**是**时才适用。

选择您希望用作此缓存行为的可信签署人的 AWS 账户：
+ **本身：**将您当前登录到 AWS 管理控制台的账户作为可信签署人。如果您目前作为 IAM 用户登录，添加相关的 AWS 账户作为可信签署人。
+ **指定账户：**在 **AWS 账号**字段中输入可信签署人的账户号码。

要创建可信签署人 URL，AWS 账户必须至少具有一个有效的 CloudFront 密钥对。

**重要**  
如果您更新您已经用于分发内容的分配，则在准备开始产生对象的签名 URL 时只添加可信签署人。在您把可信签署人添加到分配为后，用户必须使用签名 URL 访问与该缓存行为 `PathPattern` 匹配的对象。

## AWS 账户 数字
<a name="DownloadDistValuesAWSAccountNumbers"></a>

仅在您为**可信签署人**选择**指定账户**时才适用。

除当前账户之外或替代当前账户，如果您想使用 AWS 账户 创建签名 URL，请在该字段每一行输入一个 AWS 账户 号。请注意以下几点：
+ 您指定的账户必须至少具有一个有效的 CloudFront 密钥对。有关更多信息，请参阅 [为签署人创建密钥对](private-content-trusted-signers.md#private-content-creating-cloudfront-key-pairs)。
+ 您不能为 IAM 用户创建 CloudFront 密钥对，因此，不能使用 IAM 用户作为可信签署人。
+ 有关如何获取账户的 AWS 账户编号的信息，请参阅《AWS 账户管理参考指南》**中的[查看 AWS 账户标识符](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)。
+ 如果您输入当前账户的账户号码，CloudFront 则自动选中**本身**复选框，并从 **AWS 账号**列表中删除账号。

## 自动压缩对象
<a name="DownloadDistValuesCompressObjectsAutomatically"></a>

如果您希望 CloudFront 在查看器支持压缩内容时自动压缩某些类型的文件，请选择**是**。当 CloudFront 压缩内容时，由于文件更小，因此下载速度更快，并会更快地为用户呈现网页。有关更多信息，请参阅 [提供压缩文件](ServingCompressedFiles.md)。

## CloudFront 事件
<a name="DownloadDistValuesEventType"></a>

此设置适用于 **Lambda 函数关联**。

您可以选择在以下一个或多个 CloudFront 事件发生时，运行 Lambda 函数：
+ 在 CloudFront 收到查看器的请求时（查看器请求）
+ 在 CloudFront 将请求转发到源之前（源请求）
+ 在 CloudFront 收到来自源的响应时（源响应）
+ 在 CloudFront 将响应返回到查看器之前（查看器响应）

有关更多信息，请参阅 [选择要触发函数的事件](lambda-how-to-choose-event.md)。

## Lambda 函数 ARN
<a name="DownloadDistValuesLambdaFunctionARN"></a>

此设置适用于 **Lambda 函数关联**。

指定要为其添加触发器的 Lambda 函数的 Amazon 资源名称（ARN）。要了解如何获取函数的 ARN，请参阅[使用 CloudFront 控制台添加触发器](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-add-triggers.html#lambda-edge-add-triggers-cf-console)过程的步骤 1。

## 包含正文
<a name="include-body"></a>

此设置适用于 **Lambda 函数关联**。

有关更多信息，请参阅[包括正文](lambda-generating-http-responses.md#lambda-include-body-access)。

# 分配设置
<a name="DownloadDistValuesGeneral"></a>

以下值适用于整个分配。

**Topics**
+ [价格级别](#DownloadDistValuesPriceClass)
+ [AWS WAF Web ACL](#DownloadDistValuesWAFWebACL)
+ [备用域名 (CNAME)](#DownloadDistValuesCNAME)
+ [SSL 证书](#DownloadDistValuesSSLCertificate)
+ [自定义 SSL 客户端支持](#DownloadDistValuesClientsSupported)
+ [安全策略（最低 SSL/TLS 版本）](#DownloadDistValues-security-policy)
+ [支持的 HTTP 版本](#DownloadDistValuesSupportedHTTPVersions)
+ [默认根对象](#DownloadDistValuesDefaultRootObject)
+ [标准日志记录](#DownloadDistValuesLoggingOnOff)
+ [连接日志](#DownloadDistValuesConnectionLogs)
+ [日志前缀](#DownloadDistValuesLogPrefix)
+ [Cookie 日志记录](#DownloadDistValuesCookieLogging)
+ [启用 IPv6（查看器请求）](#DownloadDistValuesEnableIPv6)
+ [双向身份验证](#DownloadDistValuesMutualAuthentication)
+ [为自定义源启用 IPv6（源请求）](#DownloadDistValuesEnableIPv6-origin)
+ [注释](#DownloadDistValuesComment)
+ [分配状态](#DownloadDistValuesEnabled)

## 价格级别
<a name="DownloadDistValuesPriceClass"></a>

选择与您想为 CloudFront 服务支付的最高价对应的价格级别。默认情况下，CloudFront 从所有 CloudFront 区域的边缘站点提供您的对象。

有关价格级别以及您选择的价格级别如何影响分配的 CloudFront 性能的更多信息，请参阅 [CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。

## AWS WAF Web ACL
<a name="DownloadDistValuesWAFWebACL"></a>

您可以使用 [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf) 来保护您的 CloudFront 分配，这是一个 Web 应用程序防火墙，可让您保护您的 Web 应用程序和 API，以在请求到达服务器之前阻止请求。您可以在创建或编辑 CloudFront 分配时[为分配启用 AWS WAF](WAF-one-click.md)。

或者，您可以稍后在 AWS WAF 控制台（[https://console.aws.amazon.com/wafv2/](https://console.aws.amazon.com/wafv2/)）中为特定于您的应用程序的其他威胁配置额外的安全保护。

有关 AWS WAF 的更多信息，请参阅《AWS WAF 开发人员指南》[https://docs.aws.amazon.com/waf/latest/developerguide/](https://docs.aws.amazon.com/waf/latest/developerguide/)。

## 备用域名 (CNAME)
<a name="DownloadDistValuesCNAME"></a>

可选。指定您想用于对象 URL 的一个或多个域名，代替您创建分配时 CloudFront 指派的域名。您必须拥有该域名，或有权使用它，您可以通过添加 SSL/TLS 证书来验证这一点。

 例如，如果您希望对象的 URL：

`/images/image.jpg`

像这样：

`https://www.example.com/images/image.jpg`

而不是这样：

`https://d111111abcdef8.cloudfront.net/images/image.jpg`

为 `www.example.com` 添加 CNAME。

**重要**  
如果将 `www.example.com` 的 CNAME 添加到您的分配中，还必须执行以下操作：  
创建（或更新）一条 CNAME 记录，让您的 DNS 服务将对 `www.example.com` 的查询路由到 `d111111abcdef8.cloudfront.net`。
将来自可信证书颁发机构 (CA) 的一个证书添加到 CloudFront，该证书中涵盖您添加到分配中的域名 (CNAME)，以来验证您是否被授权使用该域名。
您必须具有权限才能创建 CNAME 记录，并指定域的 DNS 服务提供商。通常，这意味着您拥有该域，或者您正在为域所有者开发应用程序。

有关您可以添加到分配的当前最大备用域名数，或者要请求提高配额（以前称为限制），请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

更多有关备用域名的信息，请参阅 [通过添加备用域名（CNAME）使用自定义 URL](CNAMEs.md)。有关 CloudFront URL 的更多信息，请参阅[在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。

## SSL 证书
<a name="DownloadDistValuesSSLCertificate"></a>

如果指定一个备用域名来与您的分配结合使用，请选择**自定义 SSL 证书**，然后，要想验证您是否获得授权使用该备用域名，请选择一个涵盖它的证书。如果您希望查看器使用 HTTPS 访问您的对象，请选择支持此操作的设置。
+ **默认 CloudFront 证书 (\$1.cloudfront.net)** – 如果要在您的对象的 URL 中使用 CloudFront 域名，如 `https://d111111abcdef8.cloudfront.net/image1.jpg`，请选择该选项。
+ **自定义 SSL 证书** – 如果要将对象的 URL 中的您自己的域名作为备用域名，例如 `https://example.com/image1.jpg`，则选择该选项。然后，选择一个涵盖该备用域名的证书。证书列表中可以包括以下任一证书：
  +  提供的证书AWS Certificate Manager
  + 您从第三方证书颁发机构购买并上传到 ACM 的证书
  + 您从第三方证书颁发机构购买并上传到 IAM 证书存储的证书

  如果选择此设置，则建议您只在对象 URL 中使用一个备用域名 (https://example.com/logo.jpg)。如果您使用 CloudFront 分配域名 (https://d111111abcdef8.cloudfront.net/logo.jpg)，而客户端使用较旧的不支持 SNI 得查看器，则查看器得响应取决于您为**支持的客户端**选择的值：
  + **所有客户端**：当 CloudFront 域名与 SSL/TLS 证书中的域名不匹配时，查看器将显示警告。
  + **仅支持服务器名称指示 (SNI) 的客户端**：CloudFront 将删除与查看器的连接而不返回对象。

## 自定义 SSL 客户端支持
<a name="DownloadDistValuesClientsSupported"></a>

仅在您为 **SSL 证书**选择**自定义 SSL 证书（example.com）**时才适用。如果为分配指定了一个或多个备用域名和自定义 SSL 证书，请选择您希望 CloudFront 如何处理 HTTPS 请求：
+ **支持服务器名称指示 (SNI) 的客户端 - (推荐)** – 使用此设置，几乎所有新式 Web 浏览器和客户端都可以连接到分配，因为它们支持 SNI。但是，某些查看器可能会使用较旧的 Web 浏览器或不支持 SNI 的客户端，这意味着他们无法连接到分配。

  要使用 CloudFront API 应用此设置，请在 `sni-only` 字段中指定 `SSLSupportMethod`。在 CloudFormation 中，此字段命名为 `SslSupportMethod`（注意不同的大写）。
+ **旧版客户端支持** – 使用此设置，旧版 Web 浏览器和不支持 SNI 的客户端可以连接到分配。但是，此设置会产生额外的月度费用。有关确切的价格，请转到 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)页面，然后在此页中搜索**专用 IP 自定义 SSL**。

  要使用 CloudFront API 应用此设置，请在 `vip` 字段中指定 `SSLSupportMethod`。在 CloudFormation 中，此字段命名为 `SslSupportMethod`（注意不同的大写）。

有关更多信息，请参阅 [选择 CloudFront 如何处理 HTTPS 请求](cnames-https-dedicated-ip-or-sni.md)。

## 安全策略（最低 SSL/TLS 版本）
<a name="DownloadDistValues-security-policy"></a>

指定希望 CloudFront 用于与查看器（客户端）建立 HTTPS 连接的安全策略。安全策略确定两个设置：
+ CloudFront 与查看器通信时使用的最低 SSL/TLS 协议。
+ CloudFront 可用来加密其返回给查看器的内容的密码

有关安全策略（包括每个策略包含的协议和密码）的更多信息，请参阅[查看器和 CloudFront 之间支持的协议和密码](secure-connections-supported-viewer-protocols-ciphers.md)。

可用的安全策略取决于您为**SSL 证书**和**自定义 SSL 客户端支持**指定的值（称为 CloudFront API 中的 `CloudFrontDefaultCertificate` 和 `SSLSupportMethod`）：
+ 在 **SSL 证书**是**默认 CloudFront 证书 (\$1.cloudfront.net)** 时（当 API 中 `CloudFrontDefaultCertificate` 是 `true` 时），CloudFront 将安全策略自动设置为 TLSv1。
+ 当 **SSL 证书**是**自定义 SSL 证书（example.com）***并且***自定义 SSL 客户端支持**是**支持服务器名称指示（SNI）的客户端 -（推荐）**时（在 API 中 `CloudFrontDefaultCertificate` 是 `false` *并且* `SSLSupportMethod` 是 `sni-only` 时），您可以从以下安全策略中进行选择：
  + TLSv1.3\$12025
  + TLSv1.2\$12025
  + TLSv1.2\$12021
  + TLSv1.2\$12019
  + TLSv1.2\$12018
  + TLSv1.1\$12016
  + TLSv1\$12016
  + TLSv1
+ 当 **SSL 证书**是**自定义 SSL 证书（example.com）***并且***自定义 SSL 客户端支持**是**旧版客户端支持**时（在 API 中 `CloudFrontDefaultCertificate` 是 `false` *并且* `SSLSupportMethod` 是 `vip` 时），您可以从以下安全策略中进行选择：
  + TLSv1
  + SSLv3

  在此配置中，TLSv1.3\$12025、TLSv1.2\$12025、TLSv1.2\$12021、TLSv1.2\$12019、TLSv1.2\$12018、TLSv1.1\$12016 和 TLSv1\$12016 安全策略在 CloudFront 控制台或 API 中不可用。如果要使用这些安全策略之一，您可以选择以下选项：
  + 评估您的分配是否需要具有专用 IP 地址的旧版客户端支持。如果查看器支持[服务器名称指示（SNI）](https://en.wikipedia.org/wiki/Server_Name_Indication)，建议您将分配的**自定义 SSL 客户端支持**设置更新为**支持服务器名称指示（SNI）的客户端**（在 API 中将 `SSLSupportMethod` 设置为 `sni-only`）。这使您能够使用任何可用的 TLS 安全策略，并且还可以降低您的 CloudFront 费用。
  + 如果您必须保留采用专用 IP 地址的旧版客户端支持，则可以通过在 [AWS 支持中心](https://console.aws.amazon.com/support/home)创建案例来请求其它 TLS 安全策略（TLSv1.3\$12025、TLSv1.2\$12025、TLSv1.2\$12021、TLSv1.2\$12019、TLSv1.2\$12018、TLSv1.1\$12016 或 TLSv1\$12016）之一。
**注意**  
在联系 AWS 支持以请求此更改之前，请考虑以下事项：  
当您将其中一个安全策略（TLSv1.3\$12025、TLSv1.2\$12025、TLSv1.2\$12021、TLSv1.2\$12019、TLSv1.2\$12018、TLSv1.1\$12016 或 TLSv1\$12016）添加到某个旧版客户端支持分配时，安全策略将应用于您的 AWS 账户中*所有*旧版客户端支持分配的*所有*非 SNI 查看器请求。但是，当查看器将 SNI 请求发送到具有旧版客户端支持的分配时，该分配的安全策略适用。要确保将您所需的安全策略应用于发送到 AWS 账户中*所有*旧版客户端支持分配的*所有*查看器请求，请将所需安全策略分别添加到每个分配。
根据定义，新安全策略不支持与旧安全策略相同的密码和协议。例如，如果您选择将分配的安全策略从 TLSv1 升级到 TLSv1.1\$12016，则该分配将不再支持 DES-CBC3-SHA 密码。有关每个安全策略支持的密码和协议的更多信息，请参阅[查看器和 CloudFront 之间支持的协议和密码](secure-connections-supported-viewer-protocols-ciphers.md)。

## 支持的 HTTP 版本
<a name="DownloadDistValuesSupportedHTTPVersions"></a>

选择您希望分配在查看器与 CloudFront 通信时支持的 HTTP 版本。

要使查看器和 CloudFront 使用 HTTP/2，查看器必须支持 TLSv1.2 或更高版本以及服务器名称标识 (SNI)。

要使查看器和 CloudFront 使用 HTTP/3，查看器必须支持 TLSv1.3 或更高版本以及服务器名称标识 (SNI)。CloudFront 支持 HTTP/3 连接迁移，允许查看器在不丢失连接的情况下切换网络。有关连接迁移的更多信息，请参阅 RFC 9000 中的[连接迁移](https://www.rfc-editor.org/rfc/rfc9000.html#name-connection-migration)。

**注意**  
有关受支持的 TLSv1.3 密码的更多信息，请参阅[查看器和 CloudFront 之间支持的协议和密码](secure-connections-supported-viewer-protocols-ciphers.md)。

**注意**  
如果您使用 Amazon Route 53，则可以使用 HTTPS 记录来支持将协议协商作为 DNS 查找的一部分（如果客户端支持）。有关更多信息，请参阅 [Create alias resource record set](CreatingCNAME.md#alternate-domain-https)。

## 默认根对象
<a name="DownloadDistValuesDefaultRootObject"></a>

可选。当查看器请求分发的根 URL (`index.html`) 而不是分发中的对象 (`https://www.example.com/`) 时，您希望 CloudFront 从您的源（例如，`https://www.example.com/product-description.html`）中请求的对象。指定一个默认根对象，以避免公开分配的内容。

名称的长度上限是 255 个字符。该名称可包含以下任何字符：
+ A-Z, a-z
+ 0-9
+ \$1 - . \$1 \$1 / \$1 " '
+ &，作为 `&amp;` 传递和返回

当您指定默认根对象时，请仅输入对象名称，例如 `index.html`。不要在对象名称前添加 `/`。

有关更多信息，请参阅 [指定默认根对象](DefaultRootObject.md)。

## 标准日志记录
<a name="DownloadDistValuesLoggingOnOff"></a>

指定您是否希望 CloudFront 记录对象的每个请求信息并存储日志文件。您可以随时启用或禁用日志记录。启用日志记录不会产生额外的费用，但您可能会产生存储和访问文件的费用。您可以随时删除日志文件。

CloudFront 支持以下标准日志记录选项：
+ [标准日志记录（v2）](standard-logging.md)– 您可以将日志发送到多种传输目标，包括 Amazon CloudWatch Logs、Amazon Data Firehose 和 Amazon Simple Storage Service（Amazon S3）。
+ [标准日志记录（传统）](AccessLogs.md)– 您只能将日志发送到 Amazon S3 存储桶。

## 连接日志
<a name="DownloadDistValuesConnectionLogs"></a>

当您为分配启用[双向身份验证](#DownloadDistValuesMutualAuthentication)时，CloudFront 会提供连接日志，这些日志捕获有关发送到分配的请求的属性。连接日志包含客户端 IP 地址和端口、客户端证书信息、连接结果以及正在使用的 TLS 密码等信息。然后可以使用这些连接日志来查看请求模式和其他趋势。

要了解有关连接日志的更多信息，请参阅[使用连接日志实现可观测性](connection-logs.md)。

## 日志前缀
<a name="DownloadDistValuesLogPrefix"></a>

（可选）如果您启用标准日志记录（旧版），请指定您希望 CloudFront 为此分配的访问日志文件名添加作为前缀的字符串（如有），例如 `exampleprefix/`。尾随斜杠 (/) 是可选的，但建议简化浏览您的日志文件。有关更多信息，请参阅 [配置标准日志记录（旧版）](standard-logging-legacy-s3.md)。

## Cookie 日志记录
<a name="DownloadDistValuesCookieLogging"></a>

如果希望 CloudFront 将 cookie 包含在访问日志中，请选择**开启**。如果您选择将 cookie 包含在日志中，CloudFront 则记录所有 cookie，而不管您如何配置此分配的缓存行为：转发所有 cookie，不转发 cookie，或将指定的 cookie 列表转发到源。

Amazon S3 不处理 cookie，因此除非您的分配也包括 Amazon EC2 或其他自定义源，否则建议您为 **Cookie 日志记录**的值选择**关闭**。

有关 cookies 的更多信息，请参阅 [根据 Cookie 缓存内容](Cookies.md)。

## 启用 IPv6（查看器请求）
<a name="DownloadDistValuesEnableIPv6"></a>

如果您希望 CloudFront 响应来自 IPv4 和 IPv6 IP 地址的查看器请求，请选择**启用 IPv6**。有关更多信息，请参阅 [为 CloudFront 分配启用 IPv6](cloudfront-enable-ipv6.md)。

## 双向身份验证
<a name="DownloadDistValuesMutualAuthentication"></a>

可选。您可以选择为 CloudFront 分配启用双向身份验证。有关更多信息，请参阅 [CloudFront 的双向 TLS 身份验证（查看器 mTLS）源双向 TLS 与 CloudFront 结合使用](mtls-authentication.md)。

## 为自定义源启用 IPv6（源请求）
<a name="DownloadDistValuesEnableIPv6-origin"></a>

当您使用自定义源（不包括 Amazon S3 和 VPC 源）时，您可以自定义分配的源设置，以选择 CloudFront 如何使用 IPv4 或 IPv6 地址连接到源。有关更多信息，请参阅 [为 CloudFront 分配启用 IPv6](cloudfront-enable-ipv6.md)。

## 注释
<a name="DownloadDistValuesComment"></a>

可选。在创建分配时，您最多可以包含 128 字符的注释。您可以随时更新注释。

## 分配状态
<a name="DownloadDistValuesEnabled"></a>

表明您是否希望分配在一经部署时就被启用或禁用：
+ *已启用*是指，只要分配一经全面部署，您就可部署使用分配域名的链接，并且用户可检索内容。无论何时启用分配，CloudFront 将接受并处理任何最终用户使用与该分配有关的域名对内容的请求。

  当您创建、修改或删除 CloudFront 分配时，需要一定的时间才能将您所做的更改传播到 CloudFront 数据库。即刻发起的对分配相关信息的请求可能不会显示出该更改。传播通常在几分钟内完成，但高系统负载或网络分区可能会延长该时间。
+ *已禁用*是指，即使分配可能已经部署且准备好使用，用户也不能使用它。无论何时禁用分配，CloudFront 都不接受任何最终用户使用与该分配有关的域名对内容的请求。除非您将分配从禁用切换到启用（通过更新分配的配置），否则任何人都不能使用它。

您可根据您想要的频率在禁用和启用之间转换分配。遵照更新分配配置的过程。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。

# 自定义错误页面和错误缓存
<a name="DownloadDistValuesErrorPages"></a>

您可以让 CloudFront 在您的 Amazon S3 或自定义源向 CloudFront 返回 HTTP 4xx 或 5xx 状态代码时向查看器返回一个对象（例如 HTML 文件）。您还可以指定从您的源发出的错误响应或自定义错误页面缓存在 CloudFront 边缘缓存中进行缓存的时长。有关更多信息，请参阅 [为特定 HTTP 状态代码创建自定义错误页面](creating-custom-error-pages.md)。

**注意**  
以下值不包含在“创建分配”向导中，所以您只能在更新分配时配置自定义错误页面。

**Topics**
+ [HTTP 错误代码](#DownloadDistValuesErrorCode)
+ [响应页面路径](#DownloadDistValuesResponsePagePath)
+ [HTTP 响应代码](#DownloadDistValuesResponseCode)
+ [错误缓存最小 TTL（秒）](#DownloadDistValuesErrorCachingMinTTL)

## HTTP 错误代码
<a name="DownloadDistValuesErrorCode"></a>

您希望 CloudFront 返回自定义错误页面时所对应的 HTTP 状态代码。您可以将 CloudFront 配置为返回 CloudFront 缓存的无、部分或全部 HTTP 状态代码的自定义错误页面。

## 响应页面路径
<a name="DownloadDistValuesResponsePagePath"></a>

在源返回您为**错误代码**指定的 HTTP 状态代码（如 403）时，您希望 CloudFront 返回到查看器的自定义错误页面的路径（如 `/4xx-errors/403-forbidden.html`）。如果您希望将您的对象和自定义错误页面存储在不同的位置，您的分配必须包含满足以下条件时的缓存行为：
+ **Path Pattern** 的值与您的自定义错误消息的路径匹配。例如，假设您在 Amazon S3 存储桶中名为 `/4xx-errors` 的目录下为 4xx 错误保存了自定义错误页面。您的分配必须包含缓存行为，其路径模式将对自定义错误页面的请求路由至该位置，例如 **/4xx-errors/\$1**。
+ **源**值指定包含您的自定义错误页面的源的**源 ID** 值。

## HTTP 响应代码
<a name="DownloadDistValuesResponseCode"></a>

您希望 CloudFront 将其与自定义错误页面一起返回给查看器的 HTTP 状态代码。

## 错误缓存最小 TTL（秒）
<a name="DownloadDistValuesErrorCachingMinTTL"></a>

您希望 CloudFront 缓存从源服务器发出的错误响应的最短时间。

# 地理限制
<a name="DownloadDistValuesEnableGeoRestriction"></a>

如果您需要阻止选定国家/地区的用户访问您的内容，可以使用**允许列表**或**阻止列表**配置您的 CloudFront 分配。配置地理限制不收取额外费用。有关更多信息，请参阅 [限制您的内容的地理分配](georestrictions.md)。

# 测试分配
<a name="distribution-web-testing"></a>

在您已经创建分配后，CloudFront 将知晓您的源服务器的位置，而且您也知晓与该分配相关的域名。要测试您的分配，请执行以下操作：

1. 请等待您的分配部署完成。
   + 在控制台中查看您的分配的**详细信息**。部署分配后，**上次修改时间**字段将从**正在部署**更改为部署日期和时间。

1. 使用以下步骤创建链接，指向您的采用 CloudFront 域名的对象。

1. 测试链接。CloudFront 将对象提供给您的网页或应用程序。

## 创建指向对象的链接
<a name="distribution-create-object-links"></a>

使用以下过程，为 CloudFront Web 分配中的对象创建测试链接。<a name="distribution-web-testing-procedure"></a>

**为 Web 分配中的对象创建链接**

1. 将以下 HTML 代码复制到新文件中，用您的分配域名替换“*domain-name*”，然后用您的对象名称替换“*object-name*”。

   ```
   <html>
   <head>
   	<title>My CloudFront Test</title>
   </head>
   <body>
   	<p>My text content goes here.</p>
   	<p><img src="https://domain-name/object-name" alt="my test image"></p>
   </body>
   </html>
   ```

   例如，如果您的域名为 `d111111abcdef8.cloudfront.net`，且对象名称为 `image.jpg`，则链接的 URL 将为：

   `https://d111111abcdef8.cloudfront.net/image.jpg`.

   如果您的对象是在源服务器上的一个文件夹里，则此文件夹也必须包含在 URL 中。例如，如果 image.jpg 位于源服务器上的图像文件夹中，则 URL 为：

   `https://d111111abcdef8.cloudfront.net/images/image.jpg`

1. 将 HTML 代码保存在具有 .html 文件扩展名的文件中。

1. 在浏览器中打开您的网页，以确保您能够看到您的对象。

浏览器返回带嵌入图像文件的页面，该文件由边缘站点提供，且 CloudFront 确定该边缘站点适合于服务对象。

# 更新分配
<a name="HowToUpdateDistribution"></a>

在 CloudFront 控制台中，您可以看到与您的 AWS 账户关联的 CloudFront 分配、查看分配的设置以及更新大部分设置。请注意，分配传播到 AWS 边缘站点后您所做的设置更改才会生效。

## 在控制台中更新分配
<a name="update-distribution-console"></a>

以下过程向您展示了如何在控制台中更新 CloudFront 分配。

------
#### [ Multi-tenant ]<a name="HowToUpdateDistributionProcedure"></a>

**更新多租户分配**

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

1. 搜索并选择多租户分配的 ID。

1. 选择要更新的设置所对应的选项卡。

1. 进行更新后，要保存您的更改，请选择**保存更改**。有关您可以更新的设置的更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

您还可以使用 CloudFront API 更新分配：
+ 要更新分配，请参阅《Amazon CloudFront API 参考》**中的 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。

**重要**  
在更新分配时，请注意，需要使用很多在首次创建分配时不需要的其它字段。要帮助确保在使用 CloudFront API 更新分配时包含所有必需字段，请按照《Amazon CloudFront API 参考》**内 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) 中所述的步骤进行操作。

要更改分配租户的多租户分配，请更新分配租户。还可以更新分配租户，以便更新其域、证书、自定义项或参数值。有关更新分配租户证书的更多详细信息，请参阅[添加域和证书（分配租户）](managed-cloudfront-certificates.md#vanity-domain-tls-tenant)。

**更新分配租户**

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

1. 在 **SaaS** 下，选择**分配租户**。

1. 搜索分配租户。使用搜索栏中的下拉菜单，按域、名称、分配 ID、证书 ID、连接组 ID 或 Web ACL ID 进行筛选。

1. 选择分配租户的名称。

1. 要更新常规**详细信息**，请选择**编辑**，进行更新，然后选择**更新分配租户**。

1. 对于要更新的任何其它设置选择相应的选项卡，进行更新并保存。有关您可以自定义的分配租户设置的更多信息，请参阅[分配租户自定义](tenant-customization.md)。

------
#### [ Standard ]

**更新标准分配**

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

1. 选择分配的 ID。该列表包含与您登录到 CloudFront 控制台时使用的 AWS 账户关联的所有分配。

1. 要更新常规设置，选择**编辑**。否则，请选择要更新的设置所对应的选项卡。

1. 进行更新，然后选择**保存更改**。有关字段的信息，请参阅以下主题：
   + **常规设置：**[分配设置](DownloadDistValuesGeneral.md)
   + **源设置：**[源设置](DownloadDistValuesOrigin.md)
   + **缓存行为设置：**[缓存行为设置](DownloadDistValuesCacheBehavior.md)

1. 如果要删除分配中的源，请执行以下操作：

   1. 选择**行为**，并确保您将与源关联的所有默认缓存行为移动到另一个源。

   1. 选择**源**，然后选择一个源。

   1. 选择 **Delete**。

您还可以使用 CloudFront API 更新分配：
+ 要更新分配，请参阅《Amazon CloudFront API 参考》**中的 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。

**重要**  
在更新分配时，请注意需要使用很多在创建分配时不需要的其他字段。要帮助确保在使用 CloudFront API 更新分配时包含所有必需字段，请按照《Amazon CloudFront API 参考》**内 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) 中所述的步骤进行操作。

------

当您将更改保存到您的分配配置中时，CloudFront 开始将更改传送到所有边缘站点。后续的配置更改按各自的顺序传播。在您的配置在边缘站点中经更新前，CloudFront 将继续根据先前的配置从该位置提供内容。在您的配置在边缘站点已更新后，CloudFront 将立即根据新的配置从该位置提供内容。

您的更改不会同时传播到每个边缘站点。CloudFront 在传播您的更改时，我们不能确定一个指定边缘站点是根据先前配置还是新配置提供内容。

**注意**  
在极少数情况下，当主机或网络链路中断时，可能会在短时间内使用较旧的配置提供某些分配租户流量，直到您的更改已通过网络进行了传播。

要查看您的更改何时被传播，请在控制台中查看您的分配的**详细信息**。**上次修改时间**字段将从**正在部署**更改为部署完成的日期和时间。

# 标记分配
<a name="tagging"></a>

标签是可用于标识和组织 AWS 资源的词或短语。您可以向每个资源添加多个标签，并且每个标签都包含您定义的一个键和一个值。例如，键可能是“domain”，值可能是“example.com”。您可以根据添加的标签搜索和筛选您的资源。

您可以在 CloudFront 中使用标签，例如以下示例：
+ 对 CloudFront 分配强制实施基于标签的权限。有关更多信息，请参阅 [ABAC 以及 CloudFront](security_iam_service-with-iam.md#security_iam_service-with-iam-tags)。
+ 跟踪不同类别的账单信息。在您将标签应用于 CloudFront 分配或其他 AWS 资源（例如 Amazon EC2 实例或 Amazon S3 存储桶）并激活标签时，AWS 将以逗号分隔值（CSV 文件）格式生成一份成本分配报告，其中包括按活动标签汇总的使用率和成本。

  您可以设置代表业务类别（例如成本中心、应用程序名称或所有者）的标签，以便整理多种服务的成本。有关对成本分配使用标签的更多信息，请参阅《AWS Billing 用户指南》**中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

**备注**  
您可以为分配添加标签，但不能为源访问身份或失效添加标签。
CloudFront 当前不支持[标签编辑器](https://docs.aws.amazon.com/ARG/latest/userguide/tag-editor.html)和[资源组](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)。
有关可以向分配添加的最大标签数，请参阅[常规配额](cloudfront-limits.md#limits-general)。

**Contents**
+ [标签限制](#tagging-restrictions)
+ [为分配添加、编辑和删除标签](#tagging-add-edit-delete)
+ [编程标记](#tagging-related-information)

## 标签限制
<a name="tagging-restrictions"></a>

下面是适用于标签的基本限制：
+ 要了解每个分配的最大标签数，请参阅[常规配额](cloudfront-limits.md#limits-general)。
+ 最大密钥长度 – 128 个 Unicode 字符
+ 最大值长度 – 256 个 Unicode 字符
+ 键和值的有效值 – a-z、A-Z、0-9、空格和以下字符：\$1 . : / = \$1 - 和 @
+ 标签键和值区分大小写
+ 请不要使用 `aws:` 作为键的前缀。此前缀是专为 AWS 使用而预留。

## 为分配添加、编辑和删除标签
<a name="tagging-add-edit-delete"></a>

您可以使用 CloudFront 控制台管理分配标签。<a name="tagging-add-edit-delete-procedure"></a>

**为分配添加、编辑或删除标签**

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

1. 为要更新的分配选择 ID。

1. 选择**标签**选项卡。

1. 选择**管理标签**。

1. 在 **Manage tags**（管理标签）页面上，可以执行以下操作：
   + 要添加标签，请输入该标签的键和（可选）值。要添加更多标签，请选择**添加新标签**。
   + 要编辑标签，请更改标签的键或值，或者同时更改两者。您可以删除标签的值，但键是必需的。
   + 要删除标签，请选择**删除**。

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

## 编程标记
<a name="tagging-related-information"></a>

您也可以使用 CloudFront API、AWS Command Line Interface（AWS CLI）、AWS SDK 和 AWS Tools for Windows PowerShell 来应用标签。有关更多信息，请参阅以下主题：
+ CloudFront API 操作：
  + [ListTagsForResource](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListTagsForResource.html) 
  + [TagResource](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_TagResource.html) 
  + [UntagResource](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UntagResource.html) 
+ AWS CLI – 请参阅 *AWS CLI 命令参考*中的 [cloudfront](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudfront/index.html)
+ AWS SDK – 请参阅 [AWS 文档](https://docs.aws.amazon.com/index.html)页面上的适用 SDK 文档
+ Tools for Windows PowerShell – 请参阅 [AWS Tools for PowerShell Cmdlet 参考](https://docs.aws.amazon.com/powershell/latest/reference/)中的 [Amazon CloudFront](https://docs.aws.amazon.com/powershell/latest/reference/items/CloudFront_cmdlets.html)。

# 删除分配
<a name="HowToDeleteDistribution"></a>

以下过程使用 CloudFront 控制台删除分配。有关使用 CloudFront API 进行删除的信息，请参阅《Amazon CloudFront API 参考》**中的[删除分配](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DeleteDistribution.html)。

如果您需要删除 OAC 附加到 S3 存储桶的分配，请参阅[删除将其 OAC 附加到 S3 存储桶的分配](private-content-restricting-access-to-s3.md#delete-oac-distribution-s3)以获取重要详细信息。

**警告**  
在可以删除分配之前，必须先将其禁用，这需要权限以更新此分配。删除分配后，将无法恢复。
如果禁用的分配包含一个相关的备用域名，则 CloudFront 会停止接受该域名（例如 www.example.com）的流量，即便另一个分配有一个包含通配符 (\$1) 且匹配同样域的备用域名（例如 \$1. example.com）。
您无法删除已订阅 [CloudFront 固定费率定价方案](flat-rate-pricing-plan.md)的分配。您将收到一个错误，指出：“You can't delete this distribution while it's subscribed to a pricing plan.” 您必须先取消定价方案，然后在当前账单周期结束后，再删除分配。

------
#### [ Multi-tenant ]

在删除多租户分配之前，必须先从中删除所有关联的分配租户。<a name="HowToDeleteDistributionProcedure"></a>

**删除多租户分配**

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

1. 在 CloudFront 控制台的右侧窗格中，选择要删除的多租户分配的名称。

1. 对于**租户**，选择并删除所有关联的分配租户。

1. 选择**禁用**以禁用分配，然后选择**禁用分配**以进行确认。

1. 等待，直到新的时间戳显示在**上次修改时间**列下。
   + CloudFront 将您的更改传播到所有边缘站点可能需要几分钟时间。

1. 依次选择**删除**和**删除分配**。

**删除分配租户**

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

1. 在 **SaaS** 下，选择**分配租户**。

1. 搜索分配租户。使用搜索栏中的下拉菜单，按域、名称、分配 ID、证书 ID、连接组 ID 或 Web ACL ID 进行筛选。

1. 选择要删除的分配租户。

1. 依次选择**删除租户**和**删除分配租户**。

------
#### [ Standard ]

**删除标准分配**

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

1. 在 CloudFront 控制台的右侧窗格中，找到您想要删除的分配。
   + 如果**状态**列显示分配已**禁用**，请跳至步骤 6。
   + 如果**状态**显示**已启用**，但分配在**上次修改时间**列中仍显示**正在部署**，请等待部署完成，然后继续执行步骤 3。

1. 在 CloudFront 控制台的右侧窗格中，选中要删除的分配的复选框。

1. 选择**禁用**以禁用分配，并选择**是，禁用**予以确认。然后选择**关闭**。
   + **状态**列的值立即变为**已禁用**。

1. 等待，直到新的时间戳显示在**上次修改时间**列下。
   + CloudFront 将您的更改传播到所有边缘站点可能需要几分钟时间。

1. 选中要删除的分配对应的复选框。

1. 选择**删除**，**删除**。
   + 如果**删除**选项不可用，表示 CloudFront 仍在将您的更改传播到边缘站点。请等待，直到新的时间戳显示在**上次修改时间**列下，然后重复步骤 6-7。

------

# 在 CloudFront 分配中使用各种源
<a name="DownloadDistS3AndCustomOrigins"></a>

当您创建分配时，可指定 CloudFront 在其中发送对于文件的请求的*源*。您可以在 CloudFront 中使用多种不同的源。例如，您可以使用 Amazon S3 存储桶、MediaStore 容器、MediaPackage 通道、Application Load Balancer 或 AWS Lambda 函数 URL。当您创建 CloudFront 分配时，CloudFront 会自动根据内容源类型为您配置大多数分配设置。有关更多信息，请参阅 [预配置的分配设置参考](template-preconfigured-origin-settings.md)。

如果您的私有子网中有应用程序负载均衡器、网络负载均衡器或 EC2 实例，则可以将其用作 VPC 源。使用 VPC 源，只能在具有 CloudFront 分配的私有子网中访问应用程序，这会阻止在公共互联网上访问应用程序。有关更多信息，请参阅 [通过 VPC 源限制访问](private-content-vpc-origins.md)。

**注意**  
您可以使用边缘函数为每个请求动态选择合适的源。通过使用 CloudFront Functions 或 Lambda@Edge，您可以根据观众的地理位置、请求标头或查询字符串参数等因素，将请求路由到不同的源。有关更多信息，请参阅 [使用函数在边缘进行自定义](edge-functions.md)。

**Topics**
+ [使用 Amazon S3 存储桶](#using-s3-as-origin)
+ [使用 MediaStore 容器或 MediaPackage 通道](#concept_AWS_Media)
+ [使用应用程序负载均衡器](#concept_elb_origin)
+ [使用网络负载均衡器](#concept_nlb_origin)
+ [使用 Lambda 函数 URL](#concept_lambda_function_url)
+ [使用 Amazon EC2（或其他自定义源）](#concept_CustomOrigin)
+ [使用 CloudFront 源组](#concept_origin_groups)
+ [使用 Amazon API Gateway](#use-api-gate-way-origin)

## 使用 Amazon S3 存储桶
<a name="using-s3-as-origin"></a>

以下主题介绍您可以使用 Amazon S3 存储桶作为 CloudFront 分配的源的不同方法。

**Topics**
+ [使用标准 Amazon S3 存储桶](#concept_S3Origin)
+ [使用 Amazon S3 对象 Lambda](#using-S3-Object-Lambda)
+ [使用 Amazon S3 接入点](#using-S3-Access-Point)
+ [使用配置为网站端点的 Amazon S3 存储桶](#concept_S3Origin_website)
+ [将 CloudFront 添加到现有 Amazon S3 存储桶](#adding-cloudfront-to-s3)
+ [将 Amazon S3 存储桶移至其他 AWS 区域](#move-s3-bucket-different-region)

### 使用标准 Amazon S3 存储桶
<a name="concept_S3Origin"></a>

当您使用 Amazon S3 作为分配的源时，可将希望 CloudFront 传送的对象放在 Amazon S3 存储桶中。您可以使用 Amazon S3 支持的任何方法将对象放入 Amazon S3。例如，您可以使用 Amazon S3 控制台或 API 或第三方工具。您可在存储桶中创建一个层次结构来存储对象，就如您使用任何其他标准 Amazon S3 存储桶一样。

使用现有 Amazon S3 存储桶作为您的 CloudFront 源服务器不会以任何方式改变存储桶；您仍可如同往常一样使用它来存储和访问 Amazon S3 对象（标准 Amazon S3 价格）。在存储桶中存储对象会产生常规的 Amazon S3 费用。有关使用 CloudFront 的费用的更多信息，请参阅 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。有关将 CloudFront 与现有 S3 存储桶结合使用的更多信息，请参阅[将 CloudFront 添加到现有 Amazon S3 存储桶](#adding-cloudfront-to-s3)。

**重要**  
要使存储桶能够用于 CloudFront，其名称必须符合 DNS 命名要求。有关更多信息，请转至《Amazon Simple Storage Service 用户指南》**中的[存储桶命名规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)。

在指定 Amazon S3 存储桶作为 CloudFront 的源时，建议您使用以下格式：

`bucket-name.s3.region.amazonaws.com`

当您以该格式指定存储桶名称时，可以使用以下 CloudFront 功能：
+ 将 CloudFront 配置为使用 SSL/TLS 与您的 Amazon S3 存储桶通信。有关更多信息，请参阅 [将 HTTPS 与 CloudFront 结合使用](using-https.md)。
+ 使用源访问控制要求查看器使用 CloudFront URL（而非使用 Amazon S3 URL）访问您的内容。有关更多信息，请参阅 [限制对 Amazon S3 源的访问](private-content-restricting-access-to-s3.md)。
+ 通过向 CloudFront 提交 `POST` 和 `PUT` 请求，更新您的存储桶内容。有关更多信息，请参阅 [HTTP 方法](RequestAndResponseBehaviorS3Origin.md#RequestS3HTTPMethods)主题中的 [CloudFront 如何处理请求并将请求转发到您的 Amazon S3 源](RequestAndResponseBehaviorS3Origin.md#RequestBehaviorS3Origin)。

切勿使用以下格式指定存储桶：
+ Amazon S3 路径样式：`s3.amazonaws.com/bucket-name`
+ Amazon S3 CNAME

**注意**  
CloudFront 支持使用任何存储类的 S3 源，包括 S3 Intelligent-Tiering。当 CloudFront 从 S3 源请求对象时，无论对象当前位于哪个存储层，都会检索这些对象。将 CloudFront 与 S3 Intelligent-Tiering 结合使用不会影响分配的性能或功能。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用 Amazon S3 Intelligent-Tiering 管理存储成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html)。

### 使用 Amazon S3 对象 Lambda
<a name="using-S3-Object-Lambda"></a>

当您[创建对象 Lambda 接入点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-create.html)时，Amazon S3 会自动为您的对象 Lambda 接入点生成一个唯一的别名。您可以[使用此别名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-use.html#ol-access-points-alias)代替 Amazon S3 存储桶名称作为您 CloudFront 分配的源。

当您使用对象 Lambda 接入点别名作为 CloudFront 的源时，建议您使用以下格式：

`alias.s3.region.amazonaws.com`

有关查找 `alias` 的详细信息，请参阅《Amazon S3 用户指南》中的[如何为您的 S3 存储桶对象 Lambda 接入点使用存储桶式别名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-use.html#ol-access-points-alias)**。

**重要**  
当您使用对象 Lambda 接入点作为 CloudFront 的源时，必须使用[源访问控制](private-content-restricting-access-to-s3.md)。

有关示例使用案例，请参阅[将 Amazon S3 对象 Lambda 与 Amazon CloudFront 配合使用，以为最终用户量身定制内容](https://aws.amazon.com/blogs/aws/new-use-amazon-s3-object-lambda-with-amazon-cloudfront-to-tailor-content-for-end-users/)。

CloudFront 将对象 Lambda 接入点源视为[标准 Amazon S3 存储桶源](#concept_S3Origin)。

如果使用 Amazon S3 对象 Lambda 作为您分配的源，则必须配置以下四种权限。

------
#### [ Object Lambda Access Point ]

**为对象 Lambda 接入点添加权限**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**对象 Lambda 接入点**。

1. 请选择要使用的对象 Lambda 接入点。

1. 选择**权限**选项卡。

1. 在**对象 Lambda 接入点策略**部分中选择**编辑**。

1. 将以下策略粘贴到**策略**字段中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "cloudfront.amazonaws.com"
               },
               "Action": "s3-object-lambda:Get*",
               "Resource": "arn:aws:s3-object-lambda:us-east-1:123456789012:accesspoint/Object-Lambda-Access-Point-name",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceArn": "arn:aws:cloudfront::123456789012:distribution/CloudFront-distribution-ID"
                   }
               }
           }
       ]
   }
   ```

------

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

------
#### [ Amazon S3 Access Point ]

**为 Amazon S3 接入点添加权限**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**接入点**。

1. 请选择要使用的 Amazon S3 接入点。

1. 选择**权限**选项卡。

1. 在**接入点策略**部分中选择**编辑**。

1. 将以下策略粘贴到**策略**字段中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "default",
       "Statement": [
           {
               "Sid": "s3objlambda",
               "Effect": "Allow",
               "Principal": {
                   "Service": "cloudfront.amazonaws.com"
               },
               "Action": "s3:*",
               "Resource": [
                   "arn:aws:s3:us-east-1:123456789012:accesspoint/Access-Point-name",
                   "arn:aws:s3:us-east-1:123456789012:accesspoint/Access-Point-name/object/*"
               ],
               "Condition": {
                   "ForAnyValue:StringEquals": {
                       "aws:CalledVia": "s3-object-lambda.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 选择**保存**。

------
#### [ Amazon S3 bucket ]

**添加权限至 Amazon S3 存储桶**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**桶**。

1. 请选择要使用的 Amazon S3 存储桶。

1. 选择**权限**选项卡。

1. 在**存储桶策略**部分，选择**编辑**。

1. 将以下策略粘贴到**策略**字段中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": "*",
               "Resource": [
                   "arn:aws:s3:::bucket-name",
                   "arn:aws:s3:::bucket-name/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:DataAccessPointAccount": "AWS-account-ID"
                   }
               }
           }
       ]
   }
   ```

------

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

------
#### [ AWS Lambda function ]

**向 Lambda 函数添加权限**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 AWS Lambda 控制台：[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 在导航窗格中，选择**函数**。

1. 选择要使用的 AWS Lambda 函数。

1. 选择**配置**选项卡，然后选择**权限**。

1. 在**基于资源的策略声明**部分中选择**添加权限**。

1. 选择 **AWS 账户**。

1. 输入**声明 ID** 的名称。

1. 对于**委托人**，请输入 `cloudfront.amazonaws.com`。

1. 从**操作**下拉菜单中选择 `lambda:InvokeFunction`。

1. 选择**保存**。

------

### 使用 Amazon S3 接入点
<a name="using-S3-Access-Point"></a>

当您[使用 S3 接入点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-access-points.html)时，Amazon S3 会自动为您生成一个唯一的别名。您可以使用此别名代替 Amazon S3 存储桶名称作为您 CloudFront 分配的源。

当您使用 Amazon S3 接入点别名作为 CloudFront 的源时，建议您使用以下格式：

`alias.s3.region.amazonaws.com`

有关如何查找 `alias` 的详细信息，请参阅《Amazon S3 用户指南》**中的[对您的 S3 存储桶接入点使用存储桶式别名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)。

**重要**  
当您使用 Amazon S3 接入点作为 CloudFront 的源时，必须使用[源访问控制](private-content-restricting-access-to-s3.md)。

CloudFront 将 Amazon S3 接入点源视为与[标准 Amazon S3 存储桶源](#concept_S3Origin)相同。

如果使用 Amazon S3 对象 Lambda 作为您分配的源，则必须配置以下两种权限。

------
#### [ Amazon S3 Access Point ]

**为 Amazon S3 接入点添加权限**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**接入点**。

1. 请选择要使用的 Amazon S3 接入点。

1. 选择**权限**选项卡。

1. 在**接入点策略**部分中选择**编辑**。

1. 将以下策略粘贴到**策略**字段中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "default",
       "Statement": [
           {
               "Sid": "s3objlambda",
               "Effect": "Allow",
               "Principal": {"Service": "cloudfront.amazonaws.com"},
               "Action": "s3:*",
               "Resource": [
                   "arn:aws:s3:us-east-1:123456789012:accesspoint/Access-Point-name",
                   "arn:aws:s3:us-east-1:123456789012:accesspoint/Access-Point-name/object/*"
               ],
               "Condition": {
                   "StringEquals": {"aws:SourceArn": "arn:aws:cloudfront::123456789012:distribution/CloudFront-distribution-ID"}
               }
           }
       ]
   }
   ```

------

1. 选择**保存**。

------
#### [ Amazon S3 bucket ]

**添加权限至 Amazon S3 存储桶**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在导航窗格中，选择**桶**。

1. 请选择要使用的 Amazon S3 存储桶。

1. 选择**权限**选项卡。

1. 在**存储桶策略**部分，选择**编辑**。

1. 将以下策略粘贴到**策略**字段中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": "*",
               "Resource": [
                   "arn:aws:s3:::bucket-name",
                   "arn:aws:s3:::bucket-name/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:DataAccessPointAccount": "AWS-account-ID"
                   }
               }
           }
       ]
   }
   ```

------

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

------

### 使用配置为网站端点的 Amazon S3 存储桶
<a name="concept_S3Origin_website"></a>

您可以使用配置为网站端点的 Amazon S3 存储桶作为 CloudFront 的自定义源。当您配置 CloudFront 分配时，对于源，请输入您的存储桶的 Amazon S3 静态网站托管端点。此值显示在 [Amazon S3 控制台](https://console.aws.amazon.com/s3/)的**属性**选项卡上的**静态网站托管**窗格中。例如：

`http://bucket-name.s3-website-region.amazonaws.com`

有关指定 Amazon S3 静态网站端点的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[网站端点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html)。

当您以此格式将存储桶名称指定为您的源时，可使用 Amazon S3 重定向和 Amazon S3 自定义错误文档。有关更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》**中的[配置自定义错误文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CustomErrorDocSupport.html)和[配置重新导向](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-page-redirect.html)。（CloudFront 也提供自定义错误页面。有关更多信息，请参阅[为特定 HTTP 状态代码创建自定义错误页面](creating-custom-error-pages.md)。）

使用 Amazon S3 存储桶作为您的 CloudFront 源服务器不会以任何方式更改存储桶。您仍可像往常一样使用它，并且会产生定期 Amazon S3 费用。有关使用 CloudFront 的费用的更多信息，请参阅 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。

**注意**  
如果您使用 CloudFront API 创建包含配置为网站端点的 Amazon S3 存储桶的分配，则必须使用 `CustomOriginConfig` 对该分配进行配置，即使该网站是在 Amazon S3 存储桶中托管。有关使用 CloudFront API 创建分配的更多信息，请参阅《Amazon CloudFront API 参考》**中的 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

### 将 CloudFront 添加到现有 Amazon S3 存储桶
<a name="adding-cloudfront-to-s3"></a>

如果您将对象存储在 Amazon S3 存储桶中，您可以让用户直接从 S3 中获取这些对象，也可以将 CloudFront 配置为从 S3 中获取这些对象并将其分发到用户。如果您的用户频繁访问您的对象（因为在使用量较大的情况下，CloudFront 数据传输价格低于 Amazon S3 数据传输价格），则使用 CloudFront 可能会更经济高效。此外，使用 CloudFront 时下载速度也比仅使用 Amazon S3 时更快，因为您的对象存储在离您用户更近的位置。

**注意**  
如果您希望 CloudFront 尊重 Amazon S3 跨源资源共享设置，请将 CloudFront 配置为将 `Origin` 标头转发到 Amazon S3。有关更多信息，请参阅 [根据请求标头缓存内容](header-caching.md)。

如果您当前使用自己的域名（如 example.com）直接从 Amazon S3 存储桶中分发内容，而不是使用 Amazon S3 存储桶的域名（如 amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com），则可以按照以下过程添加 CloudFront 而不会造成中断。<a name="migrate-s3-to-cloudfront-process"></a>

**在您已经从 Amazon S3 分发内容时添加 CloudFront**

1. 创建 CloudFront 分配。有关更多信息，请参阅 [创建分配](distribution-web-creating-console.md)。

   当您创建分配时，请指定您的 Amazon S3 存储桶名称作为源服务器。
**重要**  
要使存储桶能够用于 CloudFront，其名称必须符合 DNS 命名要求。有关更多信息，请转至《Amazon Simple Storage Service 用户指南》**中的[存储桶命名规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)。

   如果您对 Amazon S3 使用 CNAME，请也为您的分配指定 CNAME。

1. 创建一个测试网页并在该网页中添加您的 Amazon S3 存储桶中公开可读对象的链接，然后测试这些链接。对于此初步测试，请在对象 URL 中使用此分配的 CloudFront 域名，例如 `https://d111111abcdef8.cloudfront.net/images/image.jpg`。

   有关 CloudFront URL 格式的更多信息，请参阅[在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。

1. 如果使用 Amazon S3 CNAME，应用程序会使用域名（例如，example.com）来引用 Amazon S3 存储桶中的对象，而不是使用存储桶的名称（例如，amzn-s3-demo-bucket.s3.amazonaws.com）。要继续使用您的域名来引用对象，而不是使用分配的 CloudFront 域名（例如，d111111abcdef8.cloudfront.net），您需要通过您的 DNS 服务提供商更新您的设置。

   要使 Amazon S3 CNAME 发挥作用，您的 DNS 服务提供商必须具有针对您的域的 CNAME 资源记录集，当前将对域的查询路由到您的 Amazon S3 存储桶。例如，如果用户请求该对象：

   `https://example.com/images/image.jpg`

   该请求将自动重新路由，并且用户将看到该对象：

   `https://amzn-s3-demo-bucket.s3.amazonaws.com/images/image.jpg`

   要将查询按指定路线发送到您的 CloudFront 分配而不是您的 Amazon S3 存储桶，您需要使用 DNS 服务提供商提供的方法来为您的域更新 CNAME 资源记录集。此更新后的别名记录会将 DNS 查询从您的域重新导向到分配的 CloudFront 域名。有关更多信息，请参阅 DNS 服务提供商提供的文档。
**注意**  
如果您使用 Route 53 作为您的 DNS 服务，则可使用 CNAME 资源记录集或别名资源记录集。有关编辑资源记录集的信息，请参阅[编辑记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-editing.html)。有关别名资源记录集的信息，请参阅[在别名和非别名记录之间进行选择](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html)。这两个主题都位于《Amazon Route 53 开发人员指南》**中。

   有关对 CloudFront 使用 CNAME 的更多信息，请参阅[通过添加备用域名（CNAME）使用自定义 URL](CNAMEs.md)。

   在您更新 CNAME 资源记录集后，将更改传播到整个 DNS 系统可能需要长达 72 个小时的时间，虽然通常传播的速度较快。在此期间，会继续将您的内容的一些请求按指定路线发送到您的 Amazon S3 存储桶，而其他请求将被发送到 CloudFront。

### 将 Amazon S3 存储桶移至其他 AWS 区域
<a name="move-s3-bucket-different-region"></a>

如果您使用 Amazon S3 作为 CloudFront 分配的源，并且您将存储桶移至其他 AWS 区域，则在满足下面两个条件的情况下，CloudFront 可能要花费多达 1 个小时的时间来更新其记录以使用新的区域：
+ 您使用 CloudFront 源访问身份 (OAI) 限制对存储桶的访问。
+ 您将存储桶移至需要签名版 4 以进行身份验证的 Amazon S3 区域。

在使用 OAI 时，CloudFront 使用区域（以及其他值）来计算用于从存储桶中请求对象的签名。有关 OAI 的更多信息，请参阅[使用源访问身份（旧版，不推荐）](private-content-restricting-access-to-s3.md#private-content-restricting-access-to-s3-oai)。有关支持签名版本 2 的 AWS 区域的列表，请参阅《Amazon Web Services 一般参考》**中的[签名版本 2 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html)。

要强制更快地更新 CloudFront 的记录，您可以通过更新 CloudFront 控制台中**常规**选项卡上的**说明**字段来更新您的 CloudFront 分配。在更新分配时，CloudFront 会立即检查您的存储桶所在的区域。将更改传播到所有边缘站点应该只需几分钟时间。

## 使用 MediaStore 容器或 MediaPackage 通道
<a name="concept_AWS_Media"></a>

要使用 CloudFront 流式传输视频，您可以设置配置为 MediaStore 容器的 Amazon S3 存储桶，或使用 MediaPackage 创建通道和端点。然后，在 CloudFront 中创建并配置分配以流式传输视频。

有关更多信息和分步说明，请参阅以下主题：
+ [使用 AWS Elemental MediaStore 作为源来提供视频](live-streaming.md#video-streaming-mediastore)
+ [提供使用 AWS Elemental MediaPackage 格式化的实时视频](live-streaming.md#live-streaming-with-mediapackage)

## 使用应用程序负载均衡器
<a name="concept_elb_origin"></a>

可以使用 CloudFront 将流量路由到内部和面向互联网的应用程序负载均衡器。

如果源是托管在一个或多个 Amazon EC2 实例上的一个或多个 HTTP(S) 服务器（Web 服务器），您可以选择使用面向互联网的应用程序负载均衡器来向实例分配流量。面向互联网的负载均衡器具有可公开解析的 DNS 名称，并通过互联网将来自客户端的请求路由到目标。

有关使用面向互联网的应用程序负载均衡器作为 CloudFront 的源的更多信息，包括如何确保查看器只能通过 CloudFront 而不是直接访问负载均衡器来访问您的 Web 服务器，请参阅[限制访问应用程序负载均衡器](restrict-access-to-load-balancer.md)。

或者，您可以使用 VPC 源，从虚拟私有云（VPC）私有子网中由内部应用程序负载均衡器托管的应用程序中传递内容。VPC 源可阻止从公共互联网上访问您的应用程序。有关更多信息，请参阅 [通过 VPC 源限制访问](private-content-vpc-origins.md)。

## 使用网络负载均衡器
<a name="concept_nlb_origin"></a>

您可以在 Amazon CloudFront 上同时使用内部和面向互联网的网络负载均衡器。您可以通过使用 VPC 源在 CloudFront 的私有子网内使用内部网络负载均衡器。CloudFront VPC 源可让您提供来自私有 VPC 子网中托管的应用程序的内容，而无需将其暴露于公共互联网上。有关更多信息，请参阅 [通过 VPC 源限制访问](private-content-vpc-origins.md)。

或者，还可以使用 CloudFront 从面向互联网的网络负载均衡器传递流量。面向互联网的负载均衡器具有可公开解析的 DNS 名称，可以接收来自互联网和 CloudFront 分配上的客户端的请求。

## 使用 Lambda 函数 URL
<a name="concept_lambda_function_url"></a>

[Lambda 函数 URL](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html) 是 Lambda 函数的专用 HTTPS 端点。您可以使用 Lambda 函数 URL 完全在 Lambda 中构建无服务器 Web 应用程序。您可以直接通过函数 URL 调用 Lambda Web 应用程序，而无需与 API Gateway 或应用程序负载均衡器集成。

如果您使用带有函数 URL 的 Lambda 函数构建无服务器 Web 应用程序，则可以添加 CloudFront 以获得以下好处：
+ 通过将内容缓存在更靠近查看器的位置来加速应用程序
+ 对您的 Web 应用程序使用自定义域
+ 使用 CloudFront 缓存行为将不同的 URL 路径路由到不同的 Lambda 函数
+ 使用 CloudFront 地理限制或 AWS WAF（或两者）阻止特定请求
+ 将 AWS WAF 与 CloudFront 结合使用，以帮助保护您的应用程序免受恶意自动程序侵害，帮助防止常见的应用程序漏洞，并增强对 DDoS 攻击的防范

要使用 Lambda 函数 URL 作为 CloudFront 分配的源，请将 Lambda 函数 URL 的完整域名指定为源域。Lambda 函数 URL 域名使用以下格式：

`function-URL-ID.lambda-url.AWS-Region.on.aws`

当您使用 Lambda 函数 URL 作为 CloudFront 分配的源时，函数 URL 必须可供公开访问。为此，请使用以下选项之一：
+ 如果您使用源访问控制（OAC），Lambda 函数 URL 的 `AuthType` 参数必须使用 `AWS_IAM` 值，并在基于资源的策略中允许 `lambda:InvokeFunctionUrl` 和 `lambda:InvokeFunction` 权限。有关将 Lambda 函数 URL 用于 OAC 的更多信息，请参阅[限制对 AWS Lambda 函数 URL 源的访问](private-content-restricting-access-to-lambda.md)。
+ 如果您不使用 OAC，可以将函数 URL 的 `AuthType` 参数设置为 `NONE`，并在基于资源的策略中允许 `lambda:InvokeFunctionUrl` 权限。



您也可以在 CloudFront 发送到源的请求中[添加自定义源标头](add-origin-custom-headers.md)。如果请求中不存在此标头，则编写函数代码以返回错误响应。这有助于确保用户只能通过 CloudFront（而无法直接使用 Lambda 函数 URL）来访问您的 Web 应用程序。

有关 Lambda 函数 URL 的更多信息，请参阅《AWS Lambda 开发人员指南》**中的以下主题：
+ [Lambda 函数 URL](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html) – Lambda 函数 URL 功能的一般概览
+ [调用 Lambda 函数 URL](https://docs.aws.amazon.com/lambda/latest/dg/urls-invocation.html) – 包括有关用于对无服务器 Web 应用程序进行编码的请求和响应有效负载的详细信息
+ [Lambda 函数 URL 的安全性和身份验证模型](https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html) - 包括有关 Lambda 身份验证类型的详细信息

## 使用 Amazon EC2（或其他自定义源）
<a name="concept_CustomOrigin"></a>

您可以将内部和面向互联网的 EC2 实例与 Amazon CloudFront 结合使用。您可以通过使用 VPC 源在 CloudFront 的私有子网内使用内部 EC2 实例。CloudFront VPC 源可让您提供来自私有 VPC 子网中托管的应用程序的内容，而无需将其暴露于公共互联网上。有关更多信息，请参阅 [通过 VPC 源限制访问](private-content-vpc-origins.md)。

自定义源是具有可公开解析的 DNS 名称的 HTTP(S) Web 服务器，可通过互联网将来自客户端的请求路由到目标。HTTP(S) 服务器可以托管在 AWS（例如 Amazon EC2 实例）上，也可以托管在其他地方。配置为网站端点的 Amazon S3 源也被视为自定义源。有关更多信息，请参阅 [使用配置为网站端点的 Amazon S3 存储桶](#concept_S3Origin_website)。

当您使用自己的 HTTP 服务器作为自定义源时，可指定服务器的 DNS 名称、HTTP 和 HTTPS 端口以及您在从源中提取对象时希望 CloudFront 使用的协议。

当您使用自定义源时，大部分 CloudFront 功能都受支持，但私有内容除外。虽然您可以使用签名 URL 从自定义源分配内容，但要让 CloudFront 访问自定义源，该源必须保持可公共访问。有关更多信息，请参阅 [使用签名 URL 和签名 Cookie 提供私有内容](PrivateContent.md)。

请遵照将 Amazon EC2 实例和其他自定义源与 CloudFront 结合使用的准则。
+ 在为同一 CloudFront 源提供内容的所有服务器上托管和提供相同的内容。有关更多信息，请参阅[源设置](DownloadDistValuesOrigin.md)主题中的[所有分配设置参考](distribution-web-values-specify.md)。
+ 如果需要 支持 或 CloudFront 使用此值进行调试，请在所有服务器上记录 `X-Amz-Cf-Id` 标头条目。
+ 限制对自定义源所侦听的 HTTP 和 HTTPS 端口的请求。
+ 在您实现的过程中，使所有服务器的时钟同步。请注意，CloudFront 对签名 URL 和签名 Cookie、日志和报告使用协调世界时 (UTC)。此外，如果您使用 CloudWatch 指标监控 CloudFront 活动，请注意，CloudWatch 也使用 UTC。
+ 使用冗余服务器来处理故障。
+ 有关使用自定义源来提供私有内容的信息，请参阅[在自定义源上限制对文件的访问](private-content-overview.md#forward-custom-headers-restrict-access)。
+ 有关请求和响应行为以及受支持的 HTTP 状态代码的信息，请参阅 [请求和响应行为](RequestAndResponseBehavior.md)。

如果您为自定义源使用 Amazon EC2，建议您执行下列操作：
+ 使用亚马逊机器映像为 Web 服务器自动安装软件。有关的更多信息，请参阅 [Amazon EC2 文档](https://docs.aws.amazon.com/ec2/index.html)。
+ 使用 Elastic Load Balancing 负载平衡器来处理通过多个 Amazon EC2 实例的流量，并使您的应用程序与 Amazon EC2 实例的变更隔离。例如，如果您使用负载平衡器，则可添加和删除 Amazon EC2 实例，而无需更改您的应用程序。有关更多信息，请参阅 [Elastic Load Balancing 文档](https://docs.aws.amazon.com/elasticloadbalancing/index.html)。
+ 当您创建 CloudFront 分配时，请为源服务器的域名指定负载平衡器的 URL。有关更多信息，请参阅 [创建分配](distribution-web-creating-console.md)。

## 使用 CloudFront 源组
<a name="concept_origin_groups"></a>

您可以为您的 CloudFront 源指定源组，例如，在您希望为需要高可用性的场景配置源故障转移的情况下。使用源故障转移为 CloudFront 指定主源以及 CloudFront 将在主源返回特定 HTTP 状态代码故障响应时自动切换到的次要源。

有关更多信息，包括设置源组的步骤，请参阅[通过 CloudFront 源失效转移来优化高可用性](high_availability_origin_failover.md)。

## 使用 Amazon API Gateway
<a name="use-api-gate-way-origin"></a>

您可以将 API Gateway 用作 CloudFront 分配的自定义源。有关更多信息，请参阅以下主题：
+ [Securing Amazon API Gateway with secure ciphers using Amazon CloudFront](https://aws.amazon.com/blogs/networking-and-content-delivery/securing-amazon-api-gateway-with-secure-ciphers-using-amazon-cloudfront/) AWS 博客文章
+ [如何使用我自己的 CloudFront 分配来设置 API Gateway？](https://repost.aws/knowledge-center/api-gateway-cloudfront-distribution) AWS re:Post

# 为 CloudFront 分配启用 IPv6
<a name="cloudfront-enable-ipv6"></a>

Amazon CloudFront 同时支持 IPv4 和 IPv6（从客户端到 AWS 边缘站点）。CloudFront 还支持指向源的 IPv6 连接和双堆栈（IPv4 和 IPv6）连接。这有助于您实现端到端 IPv6 传输。

IPv6 是下一代互联网协议，旨在取代 IPv4。IPv4 使用 32 位地址（例如 192.0.2.44），而 IPv6 使用 128 位地址（例如 2001:0db8:85a3::8a2e:0370:7334）。IPv6 提供扩展的地址空间，可容纳更多的互联网连接设备。

**Topics**
+ [IPv6 查看器请求](#ipv6-viewer-requests)
+ [IPv6 源请求](#ipv6-origin-requests)

## IPv6 查看器请求
<a name="ipv6-viewer-requests"></a>

通常，如果您有 IPv6 网络上的用户需要访问您的内容，则应启用 IPv6。不过，如果您使用签名 URL 或签名的 Cookie 来限制对您的内容的访问，并且您使用自定义策略（该策略包含 `IpAddress` 参数以限制可访问您的内容的 IP 地址），请不要启用 IPv6。如果您希望按 IP 地址限制对某些内容的访问，而不限制对其他内容的访问 (或限制访问，但不按 IP 地址实施限制)，则您可创建两个分配。有关使用自定义策略创建签名 URL 的信息，请参阅[使用自定义策略创建签名 URL](private-content-creating-signed-url-custom-policy.md)。有关使用自定义策略创建签名 Cookie 的信息，请参阅[使用自定义策略设置签名 Cookie](private-content-setting-signed-cookie-custom-policy.md)。

如果您使用 Route 53 别名资源记录集将流量路由到您的 CloudFront 分配，在满足以下两个条件时，您需要创建另一个别名资源记录集：
+ 您为分发启用 IPv6
+ 您在对象的 URL 中使用备用域名

有关更多信息，请参阅《Amazon Route 53 开发人员指南》**中的[使用域名将流量路由到 Amazon CloudFront 分配](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html)。

如果您已使用 Route 53 或其他 DNS 服务创建 CNAME 资源记录集，则无需进行任何更改。CNAME 记录会将流量路由到您的分配，无论查看器请求的 IP 地址格式如何。

如果您启用 IPv6 和 CloudFront 访问日志，`c-ip` 列将包含 IPv4 和 IPv6 格式的值。有关更多信息，请参阅 [日志文件字段](standard-logs-reference.md#BasicDistributionFileFormat)。

**注意**  
为了维护客户的高可用性，CloudFront 将使用 IPv4 响应查看器请求（如果我们的数据表明 IPv4 将提供更佳的用户体验）。要查明 CloudFront 通过 IPv6 提供的请求的百分比，请为分配启用 CloudFront 日志记录并解析 `c-ip` 列，该列包含已发出请求的查看器的 IP 地址。此百分比将随时间增大，但仍只占据流量的一小部分，因为 IPv6 并未在全球范围内得到所有查看器网络的支持。一些查看器网络具有很好的 IPv6 支持，但其他查看器网络根本不支持 IPv6。(查看器网络类似于您的家庭 Internet 或无线运营商。)  
有关我们对 IPv6 的支持的更多信息，请参阅 [CloudFront 常见问题](https://aws.amazon.com/cloudfront/faqs/)。有关启用访问日志的信息，请参阅[标准日志记录](DownloadDistValuesGeneral.md#DownloadDistValuesLoggingOnOff)和[日志前缀](DownloadDistValuesGeneral.md#DownloadDistValuesLogPrefix)字段。

## IPv6 源请求
<a name="ipv6-origin-requests"></a>

当您使用自定义源（不包括 Amazon S3 和 VPC 源）时，您可以自定义分配的源设置，以选择 CloudFront 如何使用 IPv4 或 IPv6 地址连接到源。对于自定义源（不包括 Amazon S3 和 VPC 源），您具有以下连接选项：
+ **仅限 IPv4（默认）**：这是 CloudFront 用于通过 IPv4 连接到源的默认配置。
+ **仅限 IPv6**：需要源域才能解析为 IPv6 地址。CloudFront 将仅使用 IPv6 地址进行源连接。
+ **双堆栈**：启用通过 IPv4 和 IPv6 进行连接。CloudFront 会自动选择 IPv4 或 IPv6 源连接来确定性能和可用性的优先级，这样您就可以将 CloudFront 用作 Web 应用程序的 IPv6 和 IPv4 双栈互联网网关。

选择符合源的网络配置和连接要求的选项。有关更多信息，请参阅 [Designing DNS for IPv6](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/designing-dns-for-ipv6.html) 和 [IPv6 security and monitoring considerations](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/ipv6-security-and-monitoring-considerations.html)。

# 使用 CloudFront 持续部署来安全地测试 CDN 配置更改
<a name="continuous-deployment"></a>

利用 Amazon CloudFront *持续部署*，您可以先对一部分生产流量进行测试，从而安全地部署对 CDN 配置的更改。您可以使用*暂存分配*和*持续部署策略*来将一些来自实际（生产）查看器的流量发送到新的 CDN 配置，并验证其是否按预期运行。您可以实时监控新配置的性能，并在准备就绪时提升新配置以通过*主分配*为所有流量提供服务。

以下图表说明了使用 CloudFront 持续部署的好处。如果没有该部署，您将必须使用模拟流量来测试 CDN 配置更改。利用持续部署，您可以使用一部分生产流量来测试更改，然后在准备就绪时将更改推广到主分配。

![\[将生产流量发送到暂存分配的 CloudFront 持续部署的示意图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-continuous-deployment.png)


阅读以下主题，了解有关使用持续部署的更多信息。

**Topics**
+ [CloudFront 持续部署工作流](continuous-deployment-workflow.md)
+ [使用暂存分配和持续部署策略](working-with-staging-distribution-continuous-deployment-policy.md)
+ [监控暂存分配](monitoring-staging-distribution.md)
+ [了解持续部署的工作方式](understanding-continuous-deployment.md)
+ [持续部署的配额和其他注意事项](continuous-deployment-quotas-considerations.md)

# CloudFront 持续部署工作流
<a name="continuous-deployment-workflow"></a>

以下简要工作流程说明了如何通过 CloudFront 持续部署来安全地测试和部署配置更改。

1. 选择要用作*主分配*的分配。主分配是目前为生产流量提供服务的分发。

1. 在主分配中，创建*暂存分配*。暂存分配作为主分配的副本开始。

1. 在*持续部署策略*中创建*流量配置*，并将其附加到主分配。这将决定 CloudFront 如何将流量路由到暂存分配。有关将请求路由到暂存分配的更多信息，请参阅[将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)。

1. 更新暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

1. 监控暂存分配以确定配置更改是否按预期执行。有关监控暂存分配的更多信息，请参阅[监控暂存分配](monitoring-staging-distribution.md)。

   在监控暂存分配时，您可以：
   + 重新更新暂存分配的配置，以继续测试配置更改。
   + 更新持续部署策略（流量配置），以向暂存分配发送更多或更少流量。

1. 如果您对暂存分配的性能感到满意，请将暂存分配的配置*提升*为主分配，这会将暂存分配的配置复制到主分配。这还将禁用持续部署策略，这意味着 CloudFront 会将所有流量路由到主分配。

您可以构建自动化来监控暂存分配的性能（步骤 5），并在满足特定条件时自动升级配置（步骤 6）。

提升配置后，可以在下次要测试配置更改时重用相同的暂存分配。

有关在 CloudFront 控制台、AWS CLI 或 CloudFront API 中使用暂存分配和持续部署策略的更多信息，请参阅以下部分。

# 使用暂存分配和持续部署策略
<a name="working-with-staging-distribution-continuous-deployment-policy"></a>

您可以使用 AWS Command Line Interface（AWS CLI）或 CloudFront API 在 CloudFront 控制台中创建、更新和修改暂存分配与持续部署策略。

## 使用持续部署策略创建暂存分配
<a name="create-staging-distribution-continuous-deployment-policy"></a>

以下步骤演示如何使用持续部署策略创建暂存分配。

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

您可以使用AWS 管理控制台，通过持续部署策略创建暂存分配。

**创建暂存分配和持续部署策略（控制台）**

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

1. 在导航窗格中，选择**分配**。

1. 选择要用作*主分配*的分配。主分配是当前为生产流量提供服务的分配，您将从中创建暂存分配。

1. 在**持续部署**部分中，选择**创建暂存分配**。这将打开**创建暂存分配**向导。

1. 在**创建暂存分配**向导中，执行以下操作：

   1. （可选）键入暂存分配的描述。

   1. 选择**下一步**。

   1. 修改暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

      修改完暂存分配的配置后，选择**下一步**。

   1. 使用控制台指定**流量配置**。这将决定 CloudFront 如何将流量路由到暂存分配。（CloudFront 将流量配置存储在*持续部署策略*中。）

      有关**流量配置**中的选项的更多信息，请参阅[将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)。

      完成**流量配置**后，选择**下一步**。

   1. 查看暂存分配的配置，包括流量配置，然后选择**创建暂存分配**。

在 CloudFront 控制台中完成**创建暂存分配**向导后，CloudFront 将执行以下操作：
+ 使用您指定的设置创建暂存分配（在步骤 5c 中）
+ 使用您指定的流量配置创建持续部署策略（在步骤 5d 中）
+ 将持续部署策略附加到您从中创建暂存分配的主分配

当主分配的配置以及附加的持续部署策略部署到边缘站点时，CloudFront 会开始根据流量配置将指定部分的流量发送到暂存分配。

------
#### [ CLI ]

要使用 AWS CLI 创建暂存分配和持续部署策略，请执行以下步骤。

**创建暂存分配（CLI）**

1. 将 **aws cloudfront get-distribution** 和 **grep** 命令结合使用以获取要用作*主分配*分发的 `ETag` 值。主分配是当前为生产流量提供服务的分发，将从中创建暂存分配。

   以下命令是一个示例。在以下示例中，将 *primary\$1distribution\$1ID* 替换为主分配的 ID。

   ```
   aws cloudfront get-distribution --id primary_distribution_ID | grep 'ETag'
   ```

   复制 `ETag` 值，因为您需要它来执行下一个步骤。

1. 使用 **aws cloudfront copy-distribution** 命令创建暂存分配。以下示例命令使用转义字符（\$1）和换行符来提高可读性，但您应在该命令中省略这些字符。在以下示例命令中：
   + 将 *primary\$1distribution\$1ID* 替换为主分配的 ID。
   + 将 *primary\$1distribution\$1ETag* 替换为主分配的 `ETag` 值（您已在上一步中获得）。
   + （可选）将 *CLI\$1example* 替换为所需的调用方参考 ID。

   ```
   aws cloudfront copy-distribution --primary-distribution-id primary_distribution_ID \
                                    --if-match primary_distribution_ETag \
                                    --staging \
                                    --caller-reference 'CLI_example'
   ```

   该命令的输出显示了有关暂存分配及其配置的信息。复制暂存分配的 CloudFront 域名，因为您在下一步中需要使用它。

**创建持续部署策略（带输入文件的 CLI）**

1. 使用以下命令创建名为 `continuous-deployment-policy.yaml` 的文件，其中包含 **create-continuous-deployment-policy** 命令的所有输入参数。以下命令使用转义字符（\$1）和换行符来提高可读性，但您应在该命令中省略这些字符。

   ```
   aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \
                                                      > continuous-deployment-policy.yaml
   ```

1. 打开刚创建的名为 `continuous-deployment-policy.yaml` 的文件。编辑该文件以指定所需的持续部署策略设置，然后保存该文件。当您编辑该文件时：
   + 在 `StagingDistributionDnsNames` 部分中：
     + 将 `Quantity` 的值更改为 `1`。
     + 对于 `Items`，粘贴暂存分配的 CloudFront 域名（您已在上一步中保存）。
   + 在 `TrafficConfig` 部分中：
     + 选择 `Type`（`SingleWeight` 或 `SingleHeader`）。
     + 删除其他类型的设置。例如，如果您需要基于权重的流量配置，请将 `Type` 设置为 `SingleWeight`，然后删除 `SingleHeaderConfig` 设置。
     + 要使用基于权重的流量配置，请将 `Weight` 的值设置为介于 `.01`（百分之一）和 `.15`（百分之十五）之间的十进制数。

     有关 `TrafficConfig` 中的选项的更多信息，请参阅[将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)和[基于权重的配置的会话粘性](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)。

1. 使用以下命令通过 `continuous-deployment-policy.yaml` 文件中的输入参数创建持续部署策略。

   ```
   aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml
   ```

   复制命令输出中的 `Id` 值。这是持续部署策略 ID，您在下一步中需要它。

**将持续部署策略附加到主分配（带输入文件的 CLI）**

1. 使用以下命令将主分配的配置保存到一个名为 `primary-distribution.yaml` 的文件中。将 *primary\$1distribution\$1ID* 替换为主分配的 ID。

   ```
   aws cloudfront get-distribution-config --id primary_distribution_ID --output yaml > primary-distribution.yaml
   ```

1. 打开刚创建的名为 `primary-distribution.yaml` 的文件。编辑文件，进行以下更改：
   + 将持续部署策略 ID（从上一步中复制的）粘贴到 `ContinuousDeploymentPolicyId` 字段中。
   + 将 `ETag` 字段重命名为 `IfMatch`，但不更改字段的值。

   完成后保存该文件。

1. 使用以下命令更新主分配以使用持续部署策略。将 *primary\$1distribution\$1ID* 替换为主分配的 ID。

   ```
   aws cloudfront update-distribution --id primary_distribution_ID --cli-input-yaml file://primary-distribution.yaml
   ```

当主分配的配置以及附加的持续部署策略部署到边缘站点时，CloudFront 会开始根据流量配置将指定部分的流量发送到暂存分配。

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

要使用 CloudFront API 创建暂存分配和持续部署策略，请使用以下 API 操作：
+ [CopyDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CopyDistribution.html)
+ [CreateContinuousDeploymentPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateContinuousDeploymentPolicy.html)

有关您在这些 API 调用中指定的字段的更多信息，请参阅以下内容：
+ [将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)
+ [基于权重的配置的会话粘性](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)
+ 有关 AWS SDK 或其他 API 客户端的 API 参考文档

创建暂存分配和持续部署策略后，使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)（在主分配上）将持续部署策略附加到主分配。

------

## 更新暂存分配
<a name="update-staging-distribution"></a>

以下步骤演示如何使用持续部署策略更新暂存分配。

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

您可以更新主分配和暂存分配的某些配置。有关更多信息，请参阅 [更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

**更新暂存分配（控制台）**

1. 通过 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分配，您将从中创建暂存分配。

1. 选择**查看暂存分配**。

1. 使用控制台修改暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

一旦暂存分配的配置部署到边缘站点，它就会对路由到暂存分配的传入流量生效。

------
#### [ CLI ]

**更新暂存分配（带输入文件的 CLI）**

1. 使用以下命令将暂存分配的配置保存到一个名为 `staging-distribution.yaml` 的文件中。将 *staging\$1distribution\$1ID* 替换为暂存分配的 ID。

   ```
   aws cloudfront get-distribution-config --id staging_distribution_ID --output yaml > staging-distribution.yaml
   ```

1. 打开刚创建的名为 `staging-distribution.yaml` 的文件。编辑文件，进行以下更改：
   + 修改暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。
   + 将 `ETag` 字段重命名为 `IfMatch`，但不更改字段的值。

   完成后保存该文件。

1. 使用以下命令更新暂存分配的配置。将 *staging\$1distribution\$1ID* 替换为暂存分配的 ID。

   ```
   aws cloudfront update-distribution --id staging_distribution_ID --cli-input-yaml file://staging-distribution.yaml
   ```

一旦暂存分配的配置部署到边缘站点，它就会对路由到暂存分配的传入流量生效。

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

要更新暂存分配的配置，请使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)（在暂存分配上）修改暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

------

## 更新持续部署策略
<a name="update-continuous-deployment-policy"></a>

以下步骤演示如何更新持续部署策略。

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

您可以通过更新持续部署策略来更新分配的流量配置。

**更新持续部署策略（控制台）**

1. 通过 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分发，您将从中创建暂存分发。

1. 在**持续部署**部分中，选择**编辑策略**。

1. 修改持续部署策略中的流量配置。在完成后，选择**保存更改**。

当主分配的配置以及更新的持续部署策略部署到边缘站点时，CloudFront 会开始根据更新的流量配置将流量发送到暂存分配。

------
#### [ CLI ]

**更新持续部署策略（带输入文件的 CLI）**

1. 使用以下命令将持续部署策略的配置保存到一个名为 `continuous-deployment-policy.yaml` 的文件中。将 *continuous\$1deployment\$1policy\$1ID* 替换为持续部署策略的 ID。以下命令使用转义字符（\$1）和换行符来提高可读性，但您应在该命令中省略这些字符。

   ```
   aws cloudfront get-continuous-deployment-policy-config --id continuous_deployment_policy_ID \
                                                          --output yaml > continuous-deployment-policy.yaml
   ```

1. 打开刚创建的名为 `continuous-deployment-policy.yaml` 的文件。编辑文件，进行以下更改：
   + 根据需要修改持续部署策略的配置。例如，您可以从使用基于标头的流量配置更改为使用基于权重的流量配置，也可以更改基于权重的配置的流量百分比（权重）。有关更多信息，请参阅[将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)和[基于权重的配置的会话粘性](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)。
   + 将 `ETag` 字段重命名为 `IfMatch`，但不更改字段的值。

   完成后保存该文件。

1. 使用以下命令更新持续部署策略。将 *continuous\$1deployment\$1policy\$1ID* 替换为持续部署策略的 ID。以下命令使用转义字符（\$1）和换行符来提高可读性，但您应在该命令中省略这些字符。

   ```
   aws cloudfront update-continuous-deployment-policy --id continuous_deployment_policy_ID \
                                                      --cli-input-yaml file://continuous-deployment-policy.yaml
   ```

当主分配的配置以及更新的持续部署策略部署到边缘站点时，CloudFront 会开始根据更新的流量配置将流量发送到暂存分配。

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

要更新持续部署策略，请使用 [UpdateContinuousDeploymentPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateContinuousDeploymentPolicy.html)

------

## 提升暂存分配的配置
<a name="promote-staging-distribution-configuration"></a>

以下步骤演示如何提升暂存分配的配置。

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

在*提升*暂存分配时，CloudFront 会将配置从暂存分配复制到主分配。CloudFront 还将禁用持续部署策略，并将所有流量路由到主分配。

提升配置后，可以在下次要测试配置更改时重用相同的暂存分配。

**提升暂存分配的配置（控制台）**

1. 通过 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分发，您将从中创建暂存分发。

1. 在**持续部署**部分中，选择**提升**。

1. 键入 **confirm**，然后选择**提升**。

------
#### [ CLI ]

在*提升*暂存分配时，CloudFront 会将配置从暂存分配复制到主分配。CloudFront 还将禁用持续部署策略，并将所有流量路由到主分配。

提升配置后，可以在下次要测试配置更改时重用相同的暂存分配。

**提升暂存分配的配置（CLI）**
+ 使用 **aws cloudfront update-distribution-with-staging-config** 命令将暂存分配的配置提升为主分配。以下示例命令使用转义字符（\$1）和换行符来提高可读性，但您应在该命令中省略这些字符。在以下示例命令中：
  + 将 *primary\$1distribution\$1ID* 替换为主分配的 ID。
  + 将 *staging\$1distribution\$1ID* 替换为暂存分配的 ID。
  + 将 *primary\$1distribution\$1ETag* 和 *staging\$1distribution\$1ETag* 分别替换为主分配和暂存分配的 `ETag` 值。确保主分配的值是第一个，如示例所示。

  ```
  aws cloudfront update-distribution-with-staging-config --id primary_distribution_ID \
                                                         --staging-distribution-id staging_distribution_ID \
                                                         --if-match 'primary_distribution_ETag,staging_distribution_ETag'
  ```

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

要将暂存分配的配置提升为主分配，请使用 [UpdateDistributionWithStagingConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistributionWithStagingConfig.html)。

------

# 监控暂存分配
<a name="monitoring-staging-distribution"></a>

要监控暂存分配的性能，您可以使用 CloudFront 为所有分发提供的相同的[指标、日志和报告](reports-and-monitoring.md)。例如：
+ 您可以在 CloudFront 控制台中查看[默认 CloudFront 分配指标](viewing-cloudfront-metrics.md#monitoring-console.distributions)（例如，总请求数和错误率），也可以[启用其他指标](viewing-cloudfront-metrics.md#monitoring-console.distributions-additional)（例如，按状态码划分的缓存命中率和错误率），但这需要支付额外费用。您也可以根据这些指标创建警报。
+ 您可以查看[标准日志](AccessLogs.md)和[实时访问日志](real-time-logs.md)，以获取有关暂存分配收到的请求的详细信息。标准日志包含以下两个字段，可帮助您识别在 CloudFront 将请求路由到暂存分配之前最初将请求发送到的主分配：`primary-distribution-id` 和 `primary-distribution-dns-name`。
+ 您可以在 CloudFront 控制台中查看和下载[报告](reports.md)，例如缓存统计数据报告。

# 了解持续部署的工作方式
<a name="understanding-continuous-deployment"></a>

以下主题说明了 CloudFront 持续部署的工作方式。

**Topics**
+ [将请求路由到暂存分配](#understanding-continuous-deployment-routing)
+ [基于权重的配置的会话粘性](#understanding-continuous-deployment-sessions)
+ [更新主分配和暂存分配](#updating-staging-and-primary-distributions)
+ [主分配和暂存分配不共享缓存](#staging-and-primary-no-shared-cache)

## 将请求路由到暂存分配
<a name="understanding-continuous-deployment-routing"></a>

在使用 CloudFront 持续部署时，您无需更改有关查看器请求的任何内容。查看器无法使用 DNS 名称、IP 地址或 CNAME 将请求直接发送到暂存分配。相反，查看器将请求发送到主（生产）分发，CloudFront 会根据持续部署策略中的流量配置设置将其中一些请求路由到暂存分配。有两种类型的流量配置：

**基于权重**  
基于权重的配置将指定百分比的查看器请求路由到暂存分配。在使用基于权重的配置时，您也可以启用*会话粘性*，这有助于确保 CloudFront 将来自同一查看器的请求视为单个会话的一部分。有关更多信息，请参阅 [基于权重的配置的会话粘性](#understanding-continuous-deployment-sessions)。

**基于标头**  
当查看器请求包含特定的 HTTP 标头（您可以指定标头和值）时，基于标头的配置会将请求路由到暂存分配。不包含指定的标头和值的请求将路由到主分配。在本地测试中或在您能够控制查看器请求时，此配置很有用。  
路由到暂存分配的标头必须包含前缀 `aws-cf-cd-`。

## 基于权重的配置的会话粘性
<a name="understanding-continuous-deployment-sessions"></a>

在使用基于权重的配置将流量路由到暂存分配时，您也可以启用*会话粘性*，这有助于确保 CloudFront 将来自同一查看器的请求视为单个会话的一部分。在启用会话粘性时，CloudFront 会设置 Cookie，以便单个会话中的来自同一查看器的所有请求都由一个分发（主分配或暂存分配）提供服务。

启用会话粘性时，还可以指定*空闲持续时间*。如果查看器在这段时间内处于空闲状态（未发送任何请求），则会话将过期，并且 CloudFront 会将来自该查看器的将来请求视为一个新会话。您可以将空闲持续时间指定为秒数，从 300（五分钟）到 3600（一小时）。

在以下情况下，CloudFront 将重置所有会话（甚至是活动会话）并将所有请求视为新会话：
+ 您禁用或启用持续部署策略
+ 您禁用或启用会话粘性设置

## 更新主分配和暂存分配
<a name="updating-staging-and-primary-distributions"></a>

当主分配附加了持续部署策略时，以下配置更改适用于主分配和暂存分配：
+ 所有缓存行为设置，包括默认缓存行为
+ 所有源设置（源和源组）
+ 自定义错误响应（错误页面）
+ 地理限制
+ 默认根对象
+ 日志记录设置
+ 描述（评论）

您还可以更新分发的配置中引用的外部资源，例如缓存策略、响应标头策略、CloudFront 函数或 Lambda@Edge 函数。

## 主分配和暂存分配不共享缓存
<a name="staging-and-primary-no-shared-cache"></a>

主分配和暂存分配不共享缓存。当 CloudFront 向暂存分配发送第一个请求时，其缓存为空。当请求到达暂存分配时，它会开始缓存响应（如果已配置为执行此操作）。

# 持续部署的配额和其他注意事项
<a name="continuous-deployment-quotas-considerations"></a>

CloudFront 持续部署受以下配额和其他注意事项的约束。

## 配额
<a name="continuous-deployment-quotas"></a>
+ 每个 AWS 账户 的最大暂存分配数：20
+ 每个 AWS 账户 的最大持续部署策略数：20
+ 在基于权重的配置中，您可以发送到暂存分配的流量的最大百分比：15%
+ 会话粘性空闲持续时间的最小和最大值：300–3600 秒

有关更多信息，请参阅 [配额](cloudfront-limits.md)。

**注意**  
使用持续部署并且您的主分配设置为 OAC 以进行 S3 存储桶访问时，请更新您的 S3 存储桶策略以允许访问暂存分配。有关 S3 存储桶策略示例，请参阅[向 CloudFront 授予访问 S3 存储桶的权限](private-content-restricting-access-to-s3.md#oac-permission-to-access-s3)。

## AWS WAF Web ACL
<a name="waf-web-acl"></a>

如果您为分配启用持续部署，那么以下注意事项适用于 AWS WAF：
+ 如果这是首次将 AWS WAF Web 访问控制列表（ACL）与分配关联，则您无法将 ACL 关联到分配。
+ 您无法从分配上取消 AWS WAF Web ACL 关联。

在执行上述任务之前，您必须删除生产分配的持续部署策略。这也会删除暂存分配。有关更多信息，请参阅 [使用 AWS WAF 保护功能](distribution-web-awswaf.md)。

## CloudFront 将所有请求发送到主分配的情况
<a name="all-requests-to-primary-distribution"></a>

在某些情况下（例如，资源利用率较高的时段），无论持续部署策略中指定的内容如何，CloudFront 都可能将所有请求发送到主分配。

无论持续部署策略中指定的内容如何，CloudFront 都会在流量高峰时段将所有请求发送到主分配。峰值流量是指 *CloudFront 服务*上的流量，而不是您的分配上的流量。

## HTTP/3
<a name="continuous-deployment-http3"></a>

您不能将持续部署与支持 HTTP/3 的分发结合使用。

# 通过添加备用域名（CNAME）使用自定义 URL
<a name="CNAMEs"></a>

在创建分配时，CloudFront 会为其提供域名，例如 d111111abcdef8.cloudfront.net。您可以使用备用域名（也称为 CNAME），而不是使用提供的此域名。

要了解如何使用您自己的域名（例如 www.example.com），请参阅以下主题：

**Topics**
+ [使用备用域名的要求](#alternate-domain-names-requirements)
+ [备用域名的使用限制](#alternate-domain-names-restrictions)
+ [添加备用域名](CreatingCNAME.md)
+ [移动备用域名](alternate-domain-names-move.md)
+ [删除备用域名](alternate-domain-names-remove-domain.md)
+ [在备用域名中使用通配符](alternate-domain-names-wildcard.md)

## 使用备用域名的要求
<a name="alternate-domain-names-requirements"></a>

在向 CloudFront 分配添加备用域名（例如 www.example.com）时，需满足以下要求：

**备用域名必须小写**  
所有备用域名 (CNAME) 都必须小写。

**备用域名必须由有效的 TLS 证书所涵盖**  
要将备用域名（CNAME）添加至 CloudFront 分配，必须给分配附加一个可信且有效的 TLS 证书，其中涵盖了备用域名。这样可以确保仅有权访问您的域证书的人员能够将 CloudFront 关联到与您的域相关的 CNAME。  
受信任证书是由 AWS Certificate Manager（ACM）或其他有效证书颁发机构（CA）颁发的证书。您可以使用自签名证书来验证现有的 CNAME，但*不能* 验证新的 CNAME。CloudFront 支持与 Mozilla 相同的证书颁发机构。有关当前列表，请参阅 [Mozilla 包含的 CA 证书列表](https://wiki.mozilla.org/CA/Included_Certificates)。有关使用第三方 CA 时的中间证书的信息，请参阅[中间证书](cnames-and-https-requirements.md#https-requirements-intermediate-certificates)。  
为了使用附加的证书来验证备用域名（包括含通配符的域名），CloudFront 会检查证书上的使用者备用名称 (SAN)。要添加的备用域名必须为 SAN 所涵盖。  
一次只能将一个证书附加到 CloudFront 分配。
您可以通过执行以下操作之一来证明您有权向分配中添加特定的备用域名：  
+ 附加包含备用域名的证书，例如 product-name.example.com。
+ 附加一个证书，其中包括一个 \$1 通配符在域名的开头，以用一个证书涵盖多个子域。当指定通配符时，可以在 CloudFront 中添加多个子域作为备用域名。
以下示例说明了如何在证书的域名中使用通配符来授权您在 CloudFront 中添加特定的备用域名。  
+ 您要添加 marketing.example.com 作为备用域名。您在证书中列示以下域名：\$1.example.com。当您将此证书附加到 CloudFront 时，可以为您的分配添加任何备用域名，以替换该层次上的通配符，包括 marketing.example.com。例如，您还可以添加以下备用域名：
  + product.example.com
  + api.example.com

  但是，不能添加所在层次高于或低于通配符的备用域名。例如，您不能添加备用域名 example.com 或 marketing.product.example.com。
+ 您要添加 example.com 作为备用域名。要执行此操作，必须在附加到分配的证书上列出域名 example.com 本身。
+ 您要添加 marketing.product.example.com 作为备用域名。要执行此操作，您可以在证书上列出 \$1.product.example.com，也可以在证书上列出 marketing.product.example.com 本身。

**更改 DNS 配置所需的权限**  
在添加备用域名时，您必须创建 CNAME 记录，以将备用域名的 DNS 查询路由到您的 CloudFront 分配。要执行此操作，您必须具有创建 CNAME 记录的权限，并为您使用的备用域名指定 DNS 服务提供商。通常，这意味着您拥有这些域，但您可能在为域所有者开发应用程序。

**备用域名和 HTTPS**  
如果您希望查看器使用 HTTPS 和备用域名，还必须进行其他配置。有关更多信息，请参阅 [使用备用域名和 HTTPS](using-https-alternate-domain-names.md)。

## 备用域名的使用限制
<a name="alternate-domain-names-restrictions"></a>

请注意备用域名的以下使用限制：

**备用域名的最大数量**  
有关您可以添加到分配的当前最大备用域名数，或要请求提高配额（以前称为限制），请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。

**重复和重合备用域名**  
如果某个备用域名已经在一个 CloudFront 分配中存在，则您不能将此相同域名添加到另一个 CloudFront 分配中，即使您的 AWS 账户拥有该另一个分配也是如此。  
不过，您可以添加通配符备用域名（例如 \$1.example.com)，该域名包含（重叠）非通配符备用域名，例如 www.example.com。如果在两个分配中有重合的备用域名，则 CloudFront 将发送请求到具有更具体名称匹配的那个分配，而不管 DNS 记录指向哪个分配。例如，marketing.domain.com 比 \$1.domain.com 更具体。  
如果您有指向 CloudFront 分配的现有通配符 DNS 条目，并且您在尝试添加具有更具体名称的新 CNAME 时收到 DNS 配置不正确的错误，请参阅[当我尝试添加新的 CNAME 时，CloudFront 返回了 DNS 记录配置不正确的错误](troubleshooting-distributions.md#troubleshoot-incorrectly-configured-DNS-record-error)。

**域前置**  
CloudFront 中具有防止跨不同 AWS 账户发生域前置的措施。在此情形中，非标准客户端会与一个 AWS 账户中的某个域名建立 TLS/SSL 连接，然后针对另一个 AWS 账户中的某个不相关域名发出 HTTPS 请求。  
 例如，TLS 连接可能连接到 www.example.com，然后发出对 www.example.org 的请求。  
为了确定请求是否域前置，CloudFront 执行以下检查：  
+ SNI 扩展等于 HTTP 请求 `Host` 标头
+ 该证书与针对请求的分配属于同一个 AWS 账户
+ HTTP 请求 `Host` 由 TLS 握手期间提供的证书所涵盖
如果这些条件均未得到满足，CloudFront 确定该请求为域前置。CloudFront 将拒绝该请求，并返回 421 HTTP 错误响应。  
如果客户端未提供 SNI 扩展，而是获取默认的 \$1.cloudfront.net 证书，则 CloudFront 将接受传入的请求。

**CloudFront 如何识别请求的分配**  
CloudFront 根据 `Host` 标头识别 HTTP 请求的分配。CloudFront 不依赖于您要连接到的 CloudFront IP 地址，也不依赖于在 TLS 握手期间提供的 SNI 握手。  
当 CloudFront 收到请求时，它将使用 `Host` 标头的值将请求与特定的分配进行匹配。  
例如，假设您有两个分配，并且已经更新了 DNS 配置，以便备用域名路由到以下端点：  
+ primary.example.com 指向 d111111primary.cloudfront.net 
+ secondary.example.com 指向 d222222secondary.cloudfront.net 
如果您向 https://primary.example.com 发出请求但将 `Host` 标头指定为 secondary.example.com（例如 `curl https://primary.example.com -H "Host: secondary.example.com"`），则请求将改为路由到辅助分配。

**在域的顶部节点（顶级域名）添加备用域名**  
当您将备用域名添加到分配时，通常在 DNS 配置中创建 CNAME 记录，以将域名的 DNS 查询路由到 CloudFront 分配。不过，您无法为 DNS 命名空间的顶端节点（也称为顶级域名）创建 CNAME 记录；DNS 协议不允许您这样做。例如，如果您注册了 DNS 名称 example.com，则顶级域名为 example.com。您不能为 example.com 创建 CNAME 记录，但可以为 www.example.com、newproduct.example.com 等创建 CNAME 记录。  
如果您使用 Route 53 作为 DNS 服务，则可以创建别名资源记录集，与 CNAME 记录相比，该记录集具有以下优势：  
+ 您可以在顶部节点 (example.com) 为域名创建别名资源记录集。
+ 您可以为备用域名创建 HTTPS 记录，以支持将协议协商作为 DNS 查找的一部分（如果客户端支持）。有关更多信息，请参阅 [Create alias resource record set](CreatingCNAME.md#alternate-domain-https)。
+ 当您使用别名资源记录集时，就不用付款进行 Route 53 查询了。
如果您启用 IPv6，您必须创建两个别名资源记录集：一个用于路由 IPv4 流量 (A 记录)，一个用于路由 IPv6 流量 (AAAA 记录)。有关更多信息，请参阅 [启用 IPv6（查看器请求）](DownloadDistValuesGeneral.md#DownloadDistValuesEnableIPv6)主题中的 [所有分配设置参考](distribution-web-values-specify.md)。
有关更多信息，请参阅《Amazon Route 53 开发人员指南》**中的[使用域名将流量路由到 Amazon CloudFront Web 分配](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html)。  
如果您的 DNS 未使用 Route 53，则可以请求任播静态 IP 地址来将 example.com 等顶级域路由到 CloudFront。有关更多信息，请参阅 [请求任播静态 IP 以用于许可列表](request-static-ips.md)。

# 添加备用域名
<a name="CreatingCNAME"></a>

以下任务列表描述了如何使用 CloudFront 控制台将备用域名添加到分配中，以便您可以在链接中使用自己的域名而非 CloudFront 域名。有关使用 CloudFront API 更新您的分配的信息，请参阅[配置分配](distribution-working-with.md)。

**注意**  
如果您希望查看器使用 HTTPS 和您的备用域名，请参阅 [使用备用域名和 HTTPS](using-https-alternate-domain-names.md)。

**开始之前：**确保执行了以下操作，然后再更新分配以添加备用域名：
+ 向 Route 53 或其他域注册商注册该域名。
+ 从授权证书颁发机构（CA）获取涵盖该域名的 TLS 证书。将证书添加至您的分配中以验证您是否有权使用该域。有关更多信息，请参阅 [使用备用域名的要求](CNAMEs.md#alternate-domain-names-requirements)。<a name="CreatingCNAMEProcess"></a>

**添加备用域名**

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

1. 为要更新的分配选择 ID。

1. 在**常规**选项卡上，选择**添加域**。

1. 可以输入多达五个域来提供服务。

1. 选择**下一步**。

1. 对于 **TLS 证书**，如果 CloudFront 在 `us-east-1` AWS 区域的您的 AWS 账户中找不到域的现有 AWS Certificate Manager（ACM）证书，您可以选择在 ACM 中自动创建证书或手动创建证书。

1. 预置证书后，必须通过 DNS 提供商更新 DNS 记录来证明域所有权。CloudFront 控制台中为您提供了需要对 DNS 记录进行更新的条目。

1. 更新 DNS 记录后，选择**验证证书**。

1. 验证证书后，选择**下一步**。

1. 查看更改并选择**添加域**。

1. 在分配的 **General** 选项卡上，确认 **Distribution Status** 已更改为 **Deployed**。如果您试图在部署对分配的更新之前使用备用域名，您在以下步骤创建的链接可能无法正常工作。

1. 配置备用域（例如 www.example.com）的 DNS 服务，以将流量路由到您的分配的 CloudFront 域名（如 d111111abcdef8.cloudfront.net）。您使用的方法取决于您是将 Route 53 还是另一个供应商作为域的 DNS 服务提供商。有关更多信息，请参阅 [将域添加到 CloudFront 标准分配中](add-domain-existing-distribution.md)。  
**Route 53**  
创建别名资源记录集。有了别名资源记录集，您就不用付款进行 Route 53 查询了。还可以为根域名（example.com）创建别名资源记录集，而 DNS 对于 CNAME 不支持此记录集。有关创建别名资源记录集的说明，请参阅《Amazon Route 53 Developer Guide》**中的 [Routing traffic to an Amazon CloudFront web distribution by using your domain name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html)。  
（可选）您可以为备用域名创建 HTTPS 记录，以支持将协议协商作为 DNS 查找的一部分（如果客户端支持）。  

**使用 HTTPS 记录创建别名资源记录集（可选）**

   1. 在 CloudFront 分配设置中启用 HTTP/2 或 HTTP/3。有关更多信息，请参阅[支持的 HTTP 版本](DownloadDistValuesGeneral.md#DownloadDistValuesSupportedHTTPVersions)和[更新分配](HowToUpdateDistribution.md)。

   1. 在 Route 53 控制台中，创建别名资源记录集。按照 [Routing traffic to an Amazon CloudFront web distribution by using your domain name](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html) 过程操作。

   1. 在创建别名资源记录集时，请创建记录类型为 **HTTPS** 的别名记录。  
**其他 DNS 服务提供商**  
使用 DNS 服务提供商提供的方法为域添加 CNAME 记录。这一新的 CNAME 记录将来自备用域名（例如，www.example.com）的 DNS 查询重新导向到分配的 CloudFront 域名（例如，d111111abcdef8.cloudfront.net）。有关更多信息，请参阅 DNS 服务提供商提供的文档。  
如果您的域名已有现有的 CNAME 记录，请更新此记录或将其替换为指向分配的 CloudFront 域名的新记录。

1. 使用 `dig` 或类似的 DNS 工具，确认您在上一步创建的 DNS 配置指向分配的域名。

   以下示例显示了 www.example.com 域上的 `dig` 请求以及响应的相关部分。

   ```
   PROMPT> dig www.example.com
   
   ; <<> DiG 9.3.3rc2 <<> www.example.com
   ;; global options:	printcmd
   ;; Got answer:
   ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15917
   ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 2, ADDITIONAL: 0
   
   ;; QUESTION SECTION:
   ;www.example.com.     IN    A
   
   ;; ANSWER SECTION:
   www.example.com. 10800 IN	CNAME	d111111abcdef8.cloudfront.net.
   ...
   ```

   回答部分显示了将针对 www.example.com 的查询路由到 CloudFront 分配域名 d111111abcdef8.cloudfront.net 的 CNAME 记录。如果 `CNAME` 右侧的名称是 CloudFront 分配的域名，则正确配置了 CNAME 记录。如果是其他任何值（如 Amazon S3 存储桶的域名），则未正确配置 CNAME 记录。在这种情况下，请回到步骤 7，纠正 CNAME 记录以指向分配的域名。

1. 通过访问具有您的域名而不是分配的 CloudFront 域名的 URL 来测试备用域名。

1. 在您的应用程序中，更改对象的 URL 以使用您的备用域名而不是 CloudFront 分配的域名。

# 移动备用域名
<a name="alternate-domain-names-move"></a>

如果您尝试向标准分配或分配租户添加备用域名，而该备用域名已与其它资源相关联，则您会收到错误消息。

例如，当您尝试将 www.example.com 添加到标准分配或分配租户，但该备用域名已与其它资源相关联时，您将收到 `CNAMEAlreadyExists` 错误消息（您提供的一个或多个 CNAME 已与其它资源相关联）。

在这种情况下，您可能需要将现有的备用域名从一项资源移到另一项资源。这是*源分配*和*目标分配*。您可以在标准分配和/或分配租户之间移动备用域名。

要移动备用域名，请参阅以下主题：

**Topics**
+ [设置目标标准分配或分配租户](alternate-domain-names-move-create-target.md)
+ [查找源标准分配或分配租户](alternate-domain-names-move-find-source.md)
+ [移动备用域名](alternate-domain-names-move-options.md)

# 设置目标标准分配或分配租户
<a name="alternate-domain-names-move-create-target"></a>

在移动备用域名之前，您必须设置目标资源。这是您要将备用域名移至其中的目标标准分配或分配租户。

------
#### [ Standard distribution ]

**设置目标标准分配**

1. 请求 TLS 证书。此证书包括备用域名作为主题或主题备用域（SAN），或包含涵盖您要移动的备用域名的通配符（\$1）。如果没有，您可以从 AWS Certificate Manager（ACM）或从其它证书颁发机构（CA）请求一个证书并将其导入 ACM。
**注意**  
您必须在美国东部（弗吉尼亚州北部）(`us-east-1`) 区域中请求或导入证书。

   有关更多信息，请参阅《AWS Certificate Manager User Guide》**中的在 AWS Certificate Manager 中 [Request a public certificate using the console](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html#request-public-console) 和 [Import a certificate](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)。

1. 如果您尚未创建目标标准分配，请立即创建一个。作为创建标准分配的一部分，请将证书与该标准分配相关联。有关更多信息，请参阅 [创建分配](distribution-web-creating-console.md)。

   如果您已经有目标标准分配，请将证书与该标准分配相关联。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。

1. **如果您要在同一个 AWS 账户内移动备用域名，请跳过此步骤。**

   要将备用域名从一个 AWS 账户移到另一个账户，必须在 DNS 配置中创建 TXT 记录。此验证步骤有助于防止未经授权的域转移。CloudFront 使用此 TXT 记录来验证您对备用域名的所有权。

   在 DNS 配置中，创建将备用域名与目标标准分配关联的 DNS TXT 记录。TXT 记录格式可能因域类型而异。
   + 对于子域，请在备用域名前面指定下划线 (`_`)。下面显示了 TXT 记录示例。

     `_www.example.com TXT d111111abcdef8.cloudfront.net`
   + 对于顶级域（或根域），请在域名前面指定下划线和句点 (`_.`)。下面显示了 TXT 记录示例。

     `_.example.com TXT d111111abcdef8.cloudfront.net`

------
#### [ Distribution tenant ]

**设置目标分配租户**

1. 请求 TLS 证书。此证书包括备用域名作为主题或主题备用域（SAN），或包含涵盖您要移动的备用域名的通配符（\$1）。如果没有，您可以从 AWS Certificate Manager（ACM）或从其它证书颁发机构（CA）请求一个证书并将其导入 ACM。
**注意**  
您必须在美国东部（弗吉尼亚州北部）(`us-east-1`) 区域中请求或导入证书。

   有关更多信息，请参阅《AWS Certificate Manager User Guide》**中的在 AWS Certificate Manager 中 [Request a public certificate using the console](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html#request-public-console) 和 [Import a certificate](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)。

1. 如果您尚未创建目标分配租户，请立即创建一个。作为创建分配租户的一部分，请将证书与分配租户相关联。有关更多信息，请参阅 [创建分配](distribution-web-creating-console.md)。

   如果您已经有目标分配租户，请将证书与该分配租户相关联。有关更多信息，请参阅 [添加域和证书（分配租户）](managed-cloudfront-certificates.md#vanity-domain-tls-tenant)。

1. **如果您要在同一个 AWS 账户内移动备用域名，请跳过此步骤。**

   要将备用域名从一个 AWS 账户移到另一个账户，必须在 DNS 配置中创建 TXT 记录。此验证步骤有助于防止未经授权的域转移，并且 CloudFront 使用此 TXT 记录来验证您对备用域名的所有权。

   在 DNS 配置中，创建一条用于将备用域名与目标分配租户关联的 DNS TXT 记录。TXT 记录格式可能因域类型而异。
   + 对于子域，请在备用域名前面指定下划线 (`_`)。下面显示了 TXT 记录示例。

     `_www.example.com TXT d111111abcdef8.cloudfront.net`
   + 对于顶级域（或根域），请在域名前面指定下划线和句点 (`_.`)。下面显示了 TXT 记录示例。

     `_.example.com TXT d111111abcdef8.cloudfront.net`

------

接下来，请参阅以下主题来查找已与备用域名关联的源标准分配或分配租户。

# 查找源标准分配或分配租户
<a name="alternate-domain-names-move-find-source"></a>

在将备用域名从一个分配（标准或租户）移到另一个分配之前，请先查找*源分配*。这是备用域名已关联的资源。在您了解源和目标分配资源的 AWS 账户 ID 后，您可以确定如何移动备用域名。

**备注**  
我们建议您使用 [ListDomainConflicts](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDomainConflicts.html) API 操作，因为此操作同时支持标准分配和分配租户。
[ListConflictingAliases](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListConflictingAliases.html) API 操作仅支持标准分配。

按照以下示例来查找源分配（标准或租户）。

------
#### [ list-domain-conflicts ]

**提示**  
对于标准分配，您必须拥有 `cloudfront:GetDistribution` 和 `cloudfront:ListDomainConflicts` 权限。
对于分配租户，您必须拥有 `cloudfront:GetDistributionTenant` 和 `cloudfront:ListDomainConflicts` 权限。

**使用 `list-domain-conflicts` 来查找源标准分配或分配租户**

1. 使用以下示例中所示的 `list-domain-conflicts` 命令。

   1. 将 *www.example.com* 替换为域名。

   1. 对于 `domain-control-validation-resource`，请指定[您之前设置的](alternate-domain-names-move-create-target.md)目标标准分配或分配租户的 ID。您必须拥有一个与涵盖指定域的证书关联的标准分配或分配租户。

   1. 使用与目标标准分配或分配租户在同一 AWS 账户中的凭证运行此命令。

   **请求**

    此示例指定分配租户。

   ```
   aws cloudfront list-domain-conflicts \
   --domain www.example.com \
   --domain-control-validation-resource "DistributionTenantId=dt_2x9GhoK0TZRsohWzv1b9It8JABC"
   ```

   **响应**

   对于命令输出中的每个域名，您可以看到以下内容：
   + 与域关联的资源类型
   + 资源 ID
   + 拥有资源的 AWS 账户 ID

   资源 ID 和账户 ID 部分隐藏。这使您可以识别属于您账户的标准分配或分配租户，并有助于保护您没有所有权的标准分配或分配租户的信息。

   ```
   {
       "DomainConflicts": [
           {
               "Domain": "www.example.com",
               "ResourceType": "distribution-tenant",
               "ResourceId": "***************ohWzv1b9It8JABC",
               "AccountId": "******112233"
           }
       ]
   }
   ```

   响应列出了与您指定的域名相冲突或重叠的所有域名。

**示例**
   + 如果您指定 *tenant1.example.com*，则响应将包括 tenant1.example.com 和重叠的通配符备用域名（如果存在，即 \$1.example.com）。
   + 如果您指定 *\$1.tenant1.example.com*，则响应将包括 \$1.tenant1.example.com 以及该通配符涵盖的任何备用域名（例如 test.tenant1.example.com、dev.tenant1.example.com 等）。

1. 在响应中，找到您要移动的备用域名的源标准分配或分配租户，并记下 AWS 账户 ID。

1. 将*源*标准分配或分配租户的账户 ID 与您在[上一步](alternate-domain-names-move-create-target.md)中创建*目标*标准分配或分配租户时的账户 ID 进行比较。然后，您可以确定源和目标是否在同一个 AWS 账户中。这有助于您确定如何移动备用域名。

   有关更多信息，请参阅《AWS Command Line Interface Reference》**中的 [https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-domain-conflicts.html](https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-domain-conflicts.html) 命令。

------
#### [ list-conflicting-aliases (standard distributions only) ]

**提示**  
您必须对目标标准分配拥有 `cloudfront:GetDistribution` 和 `cloudfront:ListConflictingAliases` 权限。

**使用 `list-conflicting-aliases` 来查找源标准分配**

1. 使用以下示例中所示的 `list-conflicting-aliases` 命令。

   1. 将 *www.example.com* 替换为备用域名，并将 *EDFDVBD6EXAMPLE* 替换为[您之前设置的](alternate-domain-names-move-create-target.md)目标标准分配的 ID。

   1. 使用与目标标准分配在同一 AWS 账户中的凭证运行此命令。

   **请求**

    此示例指定标准分配。

   ```
   aws cloudfront list-conflicting-aliases \
   --alias www.example.com \
   --distribution-id EDFDVBD6EXAMPLE
   ```

   **响应**

   对于命令输出中的每个备用域名，您可以查看与其关联的标准分配的 ID，以及拥有此标准分配的 AWS 账户 ID。标准分配和账户 ID 信息是部分隐藏的，这使您可以识别您拥有的标准分配和账户，并有助于保护您没有所有权的标准分配和账户的信息。

   ```
   {
       "ConflictingAliasesList": {
           "MaxItems": 100,
           "Quantity": 1,
           "Items": [
               {
                   "Alias": "www.example.com",
                   "DistributionId": "*******EXAMPLE",
                   "AccountId": "******112233"
               }
           ]
       }
   }
   ```

   响应列出了与您指定的域名相冲突或重叠的备用域名。

**示例**
   + 如果您指定 *www.example.com*，则响应包括 www.example.com 和重叠的通配符备用域名（\$1.example.com）（如果存在）。
   + 如果您指定 *\$1.example.com*，则响应包括 \$1.example.com 和该通配符涵盖的所有备用域名（例如，www.example.com、test.example.com、dev.example.com 等）。

1. 找到您要移动的备用域名的标准分配，并记下 AWS 账户 ID。将此账户 ID 与您在[上一步](alternate-domain-names-move-create-target.md)中创建目标标准分配的账户 ID 进行比较。然后，您可以确定这两个标准分配是否在同一个 AWS 账户中以及如何移动备用域名。

   有关更多信息，请参阅《AWS Command Line Interface Reference》**中的 [https://docs.aws.amazon.com//cli/latest/reference/cloudfront/list-conflicting-aliases.html](https://docs.aws.amazon.com//cli/latest/reference/cloudfront/list-conflicting-aliases.html) 命令。

------

接下来，请参阅以下主题以移动备用域名。

# 移动备用域名
<a name="alternate-domain-names-move-options"></a>

请根据您的具体情况，从以下方式中选择移动备用域名的方式：

**源分配和目标分配（标准或租户）在同一 AWS 账户中**  
使用 AWS Command Line Interface（AWS CLI）中的 **update-domain-association** 命令来移动备用域名。  
此命令适用于所有同账户内移动，包括当备用域名是顶级域（也称为*根域*，如 example.com）时。

**源分配和目标分配（标准或租户）在不同的 AWS 账户中**  
如果您有权访问源标准分配或分配租户，备用域名*不*是顶级域，并且您尚未使用与该备用域名重叠的通配符，请使用通配符移动备用域名。有关更多信息，请参阅 [使用通配符移动备用域名](#alternate-domain-names-move-use-wildcard)。  
如果您无法访问具有源标准分配或分配租户的 AWS 账户，可以尝试使用 **update-domain-association** 命令移动备用域名。在移动备用域名之前，必须先禁用源标准分配或分配租户。有关其他帮助，请参阅[联系 AWS 支持 以移动备用域名](#alternate-domain-names-move-contact-support)。

**注意**  
您可以使用 **associate-alias** 命令，但此命令仅支持标准分配。请参阅《Amazon CloudFront API Reference》**中的 [AssociateAlias](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_AssociateAlias.html)。

------
#### [ update-domain-association (standard distributions and distribution tenants) ]

**使用 `update-domain-association` 移动备用域名**

1. 使用 `update-domain-association` 命令，如以下示例所示。

   1. 将 *example.com* 替换为备用域名，并指定目标标准分配或分配租户的 ID。

   1. 使用与目标标准分配或分配租户在同一 AWS 账户中的凭证运行此命令。
**注意以下限制**  
除 `cloudfront:UpdateDomainAssociation` 权限外，您还必须拥有更新标准分配的 `cloudfront:UpdateDistribution` 权限。要更新分配租户，您必须拥有 `cloudfront:UpdateDistributionTenant` 权限。
如果源分配和目标分配（标准或租户）在不同的 AWS 账户中，则必须先禁用源，然后才能移动域。
必须按照[设置目标标准分配或分配租户](alternate-domain-names-move-create-target.md)中所述设置目标分配。

   **请求**

   ```
   aws cloudfront update-domain-association \
     --domain "www.example.com" \
     --target-resource DistributionTenantId=dt_9Fd3xTZq7Hl2KABC \
     --if-match E3UN6WX5ABC123
   ```

   **响应**

   ```
   {
       "ETag": "E7Xp1Y3N9DABC",
       "Domain": "www.example.com",
       "ResourceId": "dt_9Fd3xTZq7Hl2KABC"
   }
   ```

   此命令从源标准分配或分配租户中移除备用域名，并将其添加至目标标准分配或分配租户。

1. 完全部署了目标分配后，请更新 DNS 配置，以将域名指向 CloudFront 路由端点。例如，DNS 记录会将您的备用域名 (`www.example.com`) 指向 CloudFront 提供的域名 d111111abcdef8.cloudfront.net。如果目标是分配租户，请指定连接组端点。有关更多信息，请参阅 [将域指向 CloudFront](managed-cloudfront-certificates.md#point-domains-to-cloudfront)。

------
#### [ associate-alias (standard distributions only) ]

**使用 `associate-alias` 移动备用域名**

1. 使用 `associate-alias` 命令，如以下示例所示。

   1. 将 *www.example.com* 替换为备用域名，并将 *EDFDVBD6EXAMPLE* 替换为目标标准分配 ID。

   1. 使用与目标标准分配在同一 AWS 账户中的凭证运行此命令。
**注意以下限制**  
您必须对目标标准分配拥有 `cloudfront:AssociateAlias` 和 `cloudfront:UpdateDistribution` 权限。
如果源和目标标准分配在同一 AWS 账户中，您必须对源标准分配具有 `cloudfront:UpdateDistribution` 权限。
如果源标准分配和目标标准分配在不同的 AWS 账户中，则必须先禁用源标准分配。
必须按照[设置目标标准分配或分配租户](alternate-domain-names-move-create-target.md)中所述设置目标标准分配。

      **请求**

      ```
      aws cloudfront associate-alias \
      --alias www.example.com \
      --target-distribution-id EDFDVBD6EXAMPLE
      ```

      此命令从源标准分配中移除备用域名，并将其移至目标标准分配。

1. 完全部署目标标准分配后，更新您的 DNS 配置以将备用域名的 DNS 记录指向目标标准分配的分配域名。例如，DNS 记录会将您的备用域名 (`www.example.com`) 指向 CloudFront 提供的域名 d111111abcdef8.cloudfront.net。

有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudfront/associate-alias.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudfront/associate-alias.html) 命令。

------

## 使用通配符移动备用域名
<a name="alternate-domain-names-move-use-wildcard"></a>

如果源分配与目标分配在不同的 AWS 账户中，并且源分配已启用，您可以使用通配符移动备用域名。

**注意**  
您不能使用通配符移动顶级域（例如 example.com）。如果源分配和目标分配在不同的 AWS 账户中，要移动顶点域，请联系 支持。有关更多信息，请参阅 [联系 AWS 支持 以移动备用域名](#alternate-domain-names-move-contact-support)。

**使用通配符移动备用域名**
**注意**  
此过程涉及对分配的多次更新。在继续下一步之前，请等待每个分配完全部署完最新的更改。

1. 更新目标分配以添加一个通配符备用域名，该域名涵盖您要移动的备用域名。例如，如果您要移动的备用域名是 www.example.com，请将备用域名 \$1.example.com 添加到目标分配中。为此，目标分配上的 SSL/TLS 证书必须包含通配符域名。有关更多信息，请参阅[更新分配](HowToUpdateDistribution.md)。

1. 更新备用域名的 DNS 设置以指向目标分配的域名。例如，如果您要移动的备用域名是 www.example.com，请更新 www.example.com 的 DNS 记录以将流量路由到目标分配的域名（例如 d111111abcdef8.cloudfront.net）。
**注意**  
即使在您更新 DNS 设置之后，备用域名仍由源分配提供服务，因为这是当前配置备用域名的位置。

1. 更新源分配以删除备用域名。有关更多信息，请参阅[更新分配](HowToUpdateDistribution.md)。

1. 更新目标分配以添加备用域名。有关更多信息，请参阅[更新分配](HowToUpdateDistribution.md)。

1. 使用 **dig**（或类似的 DNS 查询工具）验证备用域名的 DNS 记录是否解析为目标分配的域名。

1. （可选）更新目标分配以删除通配符备用域名。

## 联系 AWS 支持 以移动备用域名
<a name="alternate-domain-names-move-contact-support"></a>

如果源分配和目标分配在不同的 AWS 账户中，并且您无权访问源分配的 AWS 账户或无法禁用源分配，您可以联系 支持 来移动备用域名。

**联系 支持 以移动备用域名**

1. 设置目标分配，包括指向目标分配的 DNS TXT 记录。有关更多信息，请参阅[设置目标标准分配或分配租户](alternate-domain-names-move-create-target.md)。

1. [联系 支持](https://console.aws.amazon.com/support/home) 以请求他们验证您是否拥有该域，然后为您将该域移动到新的 CloudFront 分配。

1. 目标分配完全部署后，更新您的 DNS 配置以将备用域名的 DNS 记录指向目标分配的分配域名。

# 删除备用域名
<a name="alternate-domain-names-remove-domain"></a>

如果您要停止将域或子域的流量路由到 CloudFront 分配，请按本节中的步骤更新 DNS 配置和 CloudFront 分配。

请务必从该分配中删除备用域名并更新您的 DNS 配置。当您希望将域名与其他 CloudFront 分配关联时，这有助于防止以后出现问题。如果某个备用域名已经与一个分配关联，则不能将该域名设置为与其他分配关联。

**注意**  
如果您要从此分配中删除备用域名以便能将它添加到其他分配，请按照[移动备用域名](alternate-domain-names-move.md)中的步骤操作。如果您改为执行此处的步骤（用于删除域），然后将域添加到另一个分配，则在一段时间内，域不会链接到新分配，因为 CloudFront 会传播到对边缘站点的更新。<a name="RemovingADomain"></a>

**从分配中删除备用域名**

1. 要开始操作，请将您的域的 Internet 流量路由到不是您的 CloudFront 分配的其他资源（如 Elastic Load Balancing 负载均衡器）。或者，您也可以删除将流量路由到 CloudFront 的 DNS 记录。

   根据您的域的 DNS 服务执行以下操作之一：
   + **如果您使用的是 Route 53**，请更新或删除别名记录或 CNAME 记录。有关更多信息，请参阅[编辑记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-editing.html)或[删除记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-deleting.html)。
   + **如果您使用的是其他 DNS 服务提供商，**请使用 DNS 服务提供商提供的方法来更新或删除将流量引向 CloudFront 的 CNAME 记录。有关更多信息，请参阅 DNS 服务提供商提供的文档。

1. 在更新您的域的 DNS 记录后，请等到更改已传播且 DNS 解析程序正在将流量路由到新资源。您可以通过创建一些在 URL 中使用您的域的测试链接来检查确认该操作完成的时间。

1. 登录到AWS 管理控制台并打开 CloudFront 控制台 ([https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home))，然后更新您的 CloudFront 分配并通过执行以下操作来删除域名：

   1. 为要更新的分配选择 ID。

   1. 在 **General** 选项卡上，选择 **Edit**。

   1. 在**备用域名(CNAME)** 中，删除您不想再用于分配的备用域名（或域名）。

   1. 选择**是，编辑**。

# 在备用域名中使用通配符
<a name="alternate-domain-names-wildcard"></a>

在添加备用域名时，可以在域名开头使用 \$1 通配符，而不是逐个添加子域。例如，如果备用域名为 \$1.example.com，您可以在 URL 中使用以 example.com 结尾的任何域名，例如 www.example.com、product-name.example.com、marketing.product-name.example.com 等。无论域名如何，对象的路径都相同，例如：
+ www.example.com/images/image.jpg
+ product-name.example.com/images/image.jpg
+ marketing.product-name.example.com/images/image.jpg

对于包含通配符的备用域名，请遵循以下要求：
+ 备用域名必须以星号和点 (\$1.) 开头。
+ 您*不能*使用通配符替换子域名的一部分，例如：\$1domain.example.com。
+ 您不能替换某个域名中间的子域名，例如：subdomain.\$1.example.com。
+ 所有备用域名，包括使用通配符的备用域名，必须涵盖在证书的使用者备用名称 (SAN) 中。

通配符备用域名（例如 \$1.example.com）可以包含其他正在使用的备用域名，例如 example.com。

# 将 WebSocket 与 CloudFront 分配结合使用
<a name="distribution-working-with.websockets"></a>

Amazon CloudFront 支持使用 WebSocket，后者是一种基于 TCP 的协议，它在客户端和服务器之间需要长期双向连接时很有用。对于实时应用程序，持久连接通常是必需的。可使用 Websocket 的场景包括社交聊天平台、在线协作工作区、多玩家游戏和提供实时数据馈送（如金融贸易平台）的服务。对于全双工通信，通过 WebSocket 连接的数据可双向流动。

WebSocket 功能会自动启用，以便与任何分配结合使用。要使用 WebSocket，请在附加到您的分配的缓存行为中配置以下内容之一：
+ 将所有查看器请求标头转发到源。您可以使用 [AllViewer 托管源请求策略](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer)。
+ 具体而言，就是在您的源请求策略中转发 `Sec-WebSocket-Key` 和 `Sec-WebSocket-Version` 请求标头。

## WebSocket 协议的工作原理
<a name="distribution-working-with.websockets.how-it-works"></a>

WebSocket 协议是一种独立的、基于 TCP 的协议，可让您避免 HTTP 的一些开销和潜在的延迟增加。

为了建立 WebSocket 连接，客户端将发送使用 HTTP 升级语义更改协议的常规 HTTP 请求。随后，服务器可以完成握手。WebSocket 连接将保持打开状态，并且客户端或服务器可以相互发送数据帧，而无需每次都建立新连接。

默认情况下，WebSocket 协议使用端口 80（对于常规 WebSocket 连接）和端口 443（对于通过 TLS 的 WebSocket 连接）。您为 CloudFront [查看器协议策略](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)和[协议（仅自定义源）](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)选择的选项适用于 WebSocket 连接以及 HTTP 流量。

## WebSocket 要求
<a name="distribution-working-with.websockets.requirements"></a>

WebSocket 请求必须遵守 [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455)（采用以下标准格式）。

**Example 示例客户端请求**  

```
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
```

**Example 示例服务器响应**  

```
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
```

如果客户端或服务器或网络中断已断开 WebSocket 连接，则客户端应用程序应重新发起与服务器的连接。

## 推荐的 WebSocket 标头
<a name="distribution-working-with.websockets.recomended-settings"></a>

为了避免在使用 WebSocket 时出现与压缩相关的意外问题，建议您在[源请求策略](origin-request-create-origin-request-policy.md)中包含以下标头：
+ `Sec-WebSocket-Key`
+ `Sec-WebSocket-Version`
+ `Sec-WebSocket-Protocol`
+ `Sec-WebSocket-Accept`
+ `Sec-WebSocket-Extensions`

**注意**  
目前，CloudFront 仅支持通过 HTTP/1.1 协议进行 WebSocket 连接。

# 请求任播静态 IP 以用于许可列表
<a name="request-static-ips"></a>

您可以从 CloudFront 请求任播静态 IP 以用于您的分配。任播静态 IP 列表可以仅包含 IPv4 IP 地址，也可以同时包含 IPv4 和 IPv6 IP 地址。这些 IP 地址专供您的 AWS 账户使用，且分布在各个地理区域。

您可以请求 21 个任播静态 IP 地址来加入网络提供商的允许列表，这样您就可以免除访问应用程序的查看器的数据费用。或者，您可以在出站安全防火墙中使用这些静态 IP，来控制与已批准应用程序的流量交换。任播静态 IP 列表可以与一个或多个分配结合使用。

如果您想启用将顶级域（例如 example.com）直接路由到 CloudFront 分配，则可以在此用例中请求 3 个任播静态 IP 地址。然后，在 DNS 中添加 A 记录，以便将顶级域指向 CloudFront。

任播静态 IP 与[服务器名称指示（SNI）](https://en.wikipedia.org/wiki/Server_Name_Indication)结合使用。有关更多信息，请参阅 [使用 SNI 处理 HTTPS 请求（适用于大多数客户端）](cnames-https-dedicated-ip-or-sni.md#cnames-https-sni)。

## 先决条件
<a name="anycast-static-ip-prereqs"></a>

要在 CloudFront 分配中使用任播静态 IP 列表，您必须为分配的价格级别选择**使用所有边缘站点**。有关定价的更多信息，请参阅 [CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。

## 请求任播静态 IP 列表
<a name="request-static-ip-list"></a>

请求任播静态 IP 列表，以用于您的 CloudFront 分配。

**请求任播静态 IP 列表**

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

1. 在左侧导航窗格中，选择**静态 IP**。

1. 对于**请求**，请选择链接以联系 CloudFront 支持工程部门。

1. 提供您的工作负载信息（每秒请求字节数和每秒请求数）。

1. CloudFront 支持工程部门会检查您的请求。检查过程最多可能需要两天。

在请求获得批准之后，您可以创建一个任播静态 IP 列表，并将列表与一个或多个分配相关联。

## 创建任播静态 IP 列表
<a name="create-static-ip-list"></a>

在您开始之前，请按照之前部分中的说明请求一个任播静态 IP 列表。

**创建任播静态 IP 列表**

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

1. 在左侧导航窗格中，选择**静态 IP**。

1. 选择**创建任播 IP 列表**。

1. 对于**名称**，输入名称。

1. 对于**静态 IP 用例**，请选择相应的用例。

1. 对于 **IP 地址类型**，指定下列选项之一：
   + **IPv4**：分配仅包含 IPv4 地址的列表 
   + **双堆栈**：分配同时包含 IPv4 和 IPv6 地址的列表

1. 查看服务条款和定价，然后选择**提交**。

创建静态 IP 列表后，您可以在静态 IP 列表详细信息页面上查看已分配的 IP 地址。您也可以将分配与静态 IP 列表相关联。

## 将任播静态 IP 列表与现有分配相关联
<a name="associate-static-ip-list-existing"></a>

在您开始之前，请按照之前部分中的说明请求和创建一个任播静态 IP 列表。

确认以下分配设置与您的任播静态 IP 列表兼容：
+ [价格级别](DownloadDistValuesGeneral.md#DownloadDistValuesPriceClass)具有**使用所有边缘站点（最佳性能）**设置。
+ 如果启用了 [IPv6](cloudfront-enable-ipv6.md)，则可以关联双堆栈任播静态 IP 列表。仅包含 IPv4 地址的任播静态 IP 列表无法与已启用 IPv6 的分配相关联。

**将任播静态 IP 列表与现有分配相关联**
+ 请执行以下操作之一：
  + 从静态 IP 列表详细信息页面关联静态 IP 列表：

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

    1. 在左侧导航窗格中，选择**静态 IP**。

    1. 选择静态 IP 列表的名称。

    1. 选择**关联分配**。

    1. 选择一个或多个分配，然后选择**关联分配**。
  + 从分配详细信息页面关联静态 IP 列表：

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

    1. 在左侧导航窗格中，选择**分配**。

    1. 选择分配的名称。

    1. 在**常规**选项卡的**设置**下，选择**编辑**。

    1. 在**任播 IP 列表**中，选择要用于此分配的任播静态 IP 列表。

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

## 将任播静态 IP 列表与新分配相关联
<a name="associate-static-ip-list-new"></a>

在您开始之前，请按照之前部分中的说明请求和创建一个任播静态 IP 列表。

**将任播静态 IP 列表与新分配相关联**
+ 创建新的 分配。有关更多信息，请参阅 [在控制台中创建 CloudFront 分配](distribution-web-creating-console.md#create-console-distribution)。对于**设置**，您必须进行以下选择才能使用任播静态 IP 列表：
  + 对于**任播 IP 列表**，从下拉列表中选择您的任播静态 IP 列表。
  + 对于**价格级别**，选择**使用所有边缘站点（最佳性能）**。
  + **注意：**如果您的任播静态 IP 仅使用 IPv4 而不使用双堆栈，则对于 **IPv6**，请选择**关闭**。

完成分配的创建。您可以根据需求，选择任播静态 IP 列表不需要的任何其他设置和配置。

有关与任播静态 IP 列表相关的配额的更多信息，请参阅《AWS 一般参考》**中的 [Amazon CloudFront 端点和配额](https://docs.aws.amazon.com/general/latest/gr/cf_region.html#limits_cloudfront)。

## 将任播静态 IP 列表与连接组相关联
<a name="associate-anycast-ip-connection-group"></a>

在您开始之前，请按照之前部分中的说明操作，请求和创建一个任播静态 IP 列表。

**将任播静态 IP 列表与新的连接组相关联**

1. 确保您已在**设置**下启用连接组。

1. 创建连接组。有关更多信息，请参阅[创建自定义连接组](custom-connection-group.md)。

1. 对于**设置**，您必须进行以下选择才能使用任播静态 IP 列表。

   1. 对于**任播 IP 列表**，从下拉列表中选择您的任播静态 IP 列表。

1. 完成连接组创建操作。

**注意**  
如果您的任播静态 IP 仅使用 IPv4 而不使用双堆栈，则对于 **IPv6**，请选择**关闭**。

有关与任播静态 IP 列表相关的配额的更多信息，请参阅《Amazon Web Services 一般参考》**中的 [Amazon CloudFront 端点和配额](https://docs.aws.amazon.com/general/latest/gr/cf_region.html#limits_cloudfront)。

## 更新任播静态 IP 列表
<a name="update-static-ip-list"></a>

在创建任播静态 IP 地址并将其与分配关联后，您可以更改任播静态 IP 列表的 IP 地址类型。

**更新任播静态 IP 列表**

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

1. 在左侧导航窗格中，选择**静态 IP**。

1. 选择静态 IP 列表的名称。

1. 选择**编辑**。

1. 对于 **IP 地址类型**，指定下列选项之一：
   + **IPv4**：分配仅包含 IPv4 地址的列表 
   + **双堆栈**：分配同时包含 IPv4 和 IPv6 地址的列表
**注意**  
如果您的关联分配已启用 IPv6，则无法选择 **IPv4**。要执行此操作，请先禁用 IPv6，之后才能更新任播静态 IP 的 IP 地址类型。有关更多信息，请参阅 [为 CloudFront 分配启用 IPv6](cloudfront-enable-ipv6.md)。

1. 选择**提交**以保存您的更改并更新任播静态 IP 列表。

# 使用 IPAM 自带 IP 到 CloudFront
<a name="bring-your-own-ip-address-using-ipam"></a>

本教材介绍如何使用 IPAM 管理 CloudFront 任播静态 IP 列表的 BYOIP CIDR。

**Topics**
+ [任播静态 IP 的 BYOIP 是什么？](#what-is-byoip-anycast)
+ [为什么要使用此功能？](#why-use-byoip)
+ [先决条件](#byoip-prerequisites)
+ [步骤 1：请求任播静态 IP 列表](#request-anycast-static-ip-list)
+ [步骤 2：创建任播静态 IP 列表](#create-anycast-static-ip-list)
+ [步骤 3：创建 CloudFront 分配](#create-cloudfront-distribution)
+ [步骤 4：与 CloudFront 资源关联](#associate-with-cloudfront-resources)
+ [步骤 5：准备迁移](#prepare-for-migration)
+ [步骤 6：全球公布 CIDR](#advertise-cidr-globally)

## 任播静态 IP 的 BYOIP 是什么？
<a name="what-is-byoip-anycast"></a>

CloudFront 支持通过 IPAM 的 BYOIP 为全球服务自带 IPv4 地址。通过 IPAM 的统一接口，客户可以使用自己的 IP 地址（BYOIP）创建专用 IP 地址池，并将其分配给 CloudFront 分配，同时利用 AWS 全球内容分发网络来交付其应用程序和内容。使用任播路由从多个 CloudFront 边缘站点同时公布您的 IP 地址。

## 为什么要使用此功能？
<a name="why-use-byoip"></a>

**通过允许列表控制网络访问权限以实现以下目标：**
+ 向网络提供商提供 IP 地址允许列表，为已批准的查看者免除数据费用
+ 配置出站安全防火墙，仅允许批准的应用程序流量通过

**简化操作与迁移**
+ 通过添加指向静态 IP 的 A 记录，将 apex 域（example.com）直接路由到 CloudFront
+ 从其他 CDN 迁移，而无需更新 IP 基础设施或防火墙配置
+ 与合作伙伴和客户一起维护现有 IP 允许列表
+ 跨多个 CloudFront 分配共享单一任播静态 IP 列表

**一致的品牌宣传**
+ 在迁移到 AWS 时，保留现有的 IP 地址空间以实现一致的品牌宣传

## 先决条件
<a name="byoip-prerequisites"></a>

要在 CloudFront 分配中使用任播静态 IP 列表，您必须为分配的价格级别选择**使用所有边缘站点**。有关定价的更多信息，请参阅 [CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。对于自带 IP（BYOIP），您还需要为分配或连接组禁用 IPv6。

在开始之前，请完成以下步骤：
+ IPAM 设置：请参阅[将 IPAM 与账户集成](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html)和[创建 IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html)。
+ 域验证：[验证域控制](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam-domain-verification-methods.html)。
+ 创建顶层池：按照[自带 IPv4 CIDR 到 IPAM 中](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam-console-ipv4.html)所述的步骤 1 到 2 进行操作。
+ 创建区域设置为全球的 IPAM 池以用于 CloudFront。有关更多信息，请参阅[使用 IPAM 自带 IP 到 CloudFront 中](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-cloudfront.html)。

**注意**  
需要**三个 /24** IPv4 CIDR 数据块。

## 步骤 1：请求任播静态 IP 列表
<a name="request-anycast-static-ip-list"></a>

请求任播静态 IP 列表，以用于您的 CloudFront 分配。<a name="request-anycast-static-ip-list-procedure"></a>

**请求任播静态 IP 列表**

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

1. 在左侧导航窗格中，选择**静态 IP**。

1. 对于**请求**，请选择链接以联系 CloudFront 支持工程部门。

1. 提供您的工作负载信息（每秒请求字节数和每秒请求数）。

1. CloudFront 支持工程部门会检查您的请求。检查过程最多可能需要两天。

1. 在请求获得批准之后，您可以创建一个任播静态 IP 列表，并将列表与一个或多个分配相关联。

## 步骤 2：创建任播静态 IP 列表
<a name="create-anycast-static-ip-list"></a>

在您开始之前，请按照之前部分中的说明请求一个任播静态 IP 列表。<a name="create-anycast-static-ip-list-procedure"></a>

**创建任播静态 IP 列表**

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

1. 在左侧导航窗格中，选择**静态 IP**。

1. 选择**创建任播 IP 列表**。

1. 对于**名称**，输入名称。

1. 对于**静态 IP 使用案例**，选择 **BYOIP** 作为您的使用案例。

以下步骤不同于标准区域 BYOIP 流程，并且将建立用于全球服务的模式：

### AWS CLI
<a name="create-anycast-cli"></a>

安装或更新到最新版本的 AWS CLI。有关更多信息，请参阅[《AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 检索已预调配 CIDR 数据块的 IPAM 池的 IpamPoolArn。有关更多信息，请参阅[仅使用 AWS CLI 自带公有 IPv4 CIDR 到 IPAM 中](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam-ipv4.html)。

1. 使用 CIDR 数据块和 IPAM 配置创建任播 IP 列表：

   ```
   aws cloudfront create-anycast-ip-list \
       --name byoip-aip-1 \
       --ip-count 3 \
       --region us-east-1 \
       --ip-address-type ipv4 \
       --ipam-cidr-configs '[{"Cidr":"1.1.1.0/24","IpamPoolArn":"arn:aws:ec2::123456789012:ipam-pool/ipam-pool-005d58a8aa8147abc"},{"Cidr":"2.2.2.0/24","IpamPoolArn":"arn:aws:ec2::123456789012:ipam-pool/ipam-pool-005d58a8aa8147abc"},{"Cidr":"3.3.3.0/24","IpamPoolArn":"arn:aws:ec2::123456789012:ipam-pool/ipam-pool-005d58a8aa8147abc"}]'
   ```

**注意**  
您无法从池中选择特定的 IP 地址。CloudFront 将自动执行此操作。

## 步骤 3：创建 CloudFront 分配
<a name="create-cloudfront-distribution"></a>

对于 CloudFront，您可以按照说明操作以[创建标准分配](distribution-web-creating-console.md)或使用[多租户分配](distribution-config-options.md)。

## 步骤 4：与 CloudFront 资源关联
<a name="associate-with-cloudfront-resources"></a>
+ [将任播静态 IP 列表与现有分配相关联](request-static-ips.md#associate-static-ip-list-existing)
+ [将任播静态 IP 列表与新分配相关联](request-static-ips.md#associate-static-ip-list-new)
+ [将任播静态 IP 列表与连接组相关联](request-static-ips.md#associate-anycast-ip-connection-group)

## 步骤 5：准备迁移
<a name="prepare-for-migration"></a>

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[步骤 4：准备迁移](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-cloudfront.html#step-4-prepare-for-migration)。

## 步骤 6：全球公布 CIDR
<a name="advertise-cidr-globally"></a>

有关更多信息，请参阅《Amazon VPC 用户指南》**中的[步骤 5：全球公布 CIDR](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-cloudfront.html#step-5-advertise-cidr-globally)。

# 将 gRPC 与 CloudFront 分配结合使用
<a name="distribution-using-grpc"></a>

Amazon CloudFront 支持 gRPC，这是一种基于 HTTP/2 的开源远程过程调用（RPC，Remote Procedure Call）框架。gRPC 提供双向流和二进制协议缓冲区有效载荷，因此适用于需要低延迟通信的应用程序。

CloudFront 接收您的 gRPC 请求并将其直接代理到您的来源。您可以使用 CloudFront 来代理四种类型的 gRPC 服务：
+ 一元 RPC
+ 服务器流 RPC
+ 客户端流 RPC
+ 双向流 RPC

## gRPC 在 CloudFront 中的工作方式
<a name="how-grpc-works-cloudfront"></a>

要在 CloudFront 中配置 gRPC，请将提供 gRPC 服务的来源设置为分配的来源。您可以使用同时提供非 gRPC 和 gRPC 服务的来源。CloudFront 根据 `Content-Type` 标头确定传入的请求是 gRPC 请求还是 HTTP/HTTPS 请求。如果请求的 `Content-Type` 标头的值为 `application/grpc`，则该请求被视为 gRPC 请求，CloudFront 会将该请求代理到您的来源。

**注意**  
要启用分配来处理 gRPC 请求，请包含 HTTP/2 作为支持的 HTTP 版本之一，并允许 HTTP 方法，包括 `POST`。您的 gRPC 源端点必须配置为支持 HTTPS，因为 CloudFront 仅支持安全（基于 HTTPS）的 gRPC 连接。gRPC 仅支持端到端 HTTPS。如果您使用自定义源，请验证您的[协议](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)设置是否支持 HTTPS。

要为您的分配启用 gRPC 支持，请完成以下步骤：

1. 更新分配的缓存行为来允许 HTTP 方法，包括 `POST` 方法。

1. 选择 `POST` 方法后，选中显示的 gRPC 复选框。

1. 将 **HTTP/2** 指定为支持的 HTTP 版本之一。

有关更多信息，请参阅以下主题：
+ [允许通过 HTTP/2 发出 gRPC 请求](DownloadDistValuesCacheBehavior.md#enable-grpc-distribution)
+ 《Amazon CloudFront API Reference**》中的 [GrpcConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GrpcConfig.html)

由于 gRPC 仅用于不可缓存的 API 流量，因此您的缓存配置不会影响 gRPC 请求。您可以使用源请求策略，将自定义标头添加到发送到您的 gRPC 来源的 gRPC 请求中。您可以 AWS WAF 与 CloudFront 配合使用来管理对 gRPC 分配的访问权限，控制机器人，并保护您的 gRPC 应用程序免受网络漏洞攻击。CloudFront gRPC 支持 [CloudFront Functions](cloudfront-functions.md)。

除 HTTPS 状态外，您还将随 gRPC 响应收到 grpc-status。有关 grpc-status 的可能值列表，请参阅[状态码及其在 gRPC 中的用法](https://grpc.github.io/grpc/core/md_doc_statuscodes.html)。

**备注**  
gRPC 不支持以下 CloudFront 功能：  
[自定义错误响应](GeneratingCustomErrorResponses.md)
 gRPC 不支持[来源失效转移](high_availability_origin_failover.md)，因为 gRPC 使用 `POST` 方法。只有当查看器请求的 HTTP 方法是 `GET`、`HEAD` 或 `OPTIONS` 时，CloudFront 才会故障转移到辅助源。
CloudFront 将 gRPC 请求直接代理到来源并绕过区域边缘缓存（REC）。由于 gRPC 会绕过 REC，因此 gRPC 不支持 [Lambda@Edge](lambda-at-the-edge.md) 或[源护盾](origin-shield.md)。
gRPC 不支持 AWS WAF 请求正文检查规则。如果您在分配的 Web ACL 上启用了这些规则，则任何使用 gRPC 的请求都将忽略请求正文检查规则。所有其他 AWS WAF 规则仍将适用。有关更多信息，请参阅 [为分配启用 AWS WAF](WAF-one-click.md)。