

# 使用 Amazon CloudFront 为网站提速
<a name="website-hosting-cloudfront-walkthrough"></a>

您可以使用 [Amazon CloudFront](https://www.amazonaws.cn/cloudfront) 来提高 Amazon S3 网站的性能。CloudFront 可将您的网站文件（如 HTML、图像和视频）提供给全球各地的数据中心（称为*边缘站点*）使用。当访问者从您的网站请求文件时，CloudFront 会自动将请求重定向到最近边缘站点上的文件副本。这时的下载速度会比访问者从更远的数据中心请求该内容更快。

CloudFront 会将内容在边缘站点上缓存您指定的时间。如果访问者请求已过期的缓存内容，CloudFront 会检查来源服务器，确定该内容是否有更新的版本可用。如果有更新的版本，则 CloudFront 将新版本复制到该边缘站点。当访问者请求内容时，您对原始内容所做的更改便会复制到边缘站点。

**在没有 Route 53 的情况下使用 CloudFront**  
本页面上的教程使用 Route 53 来指向您的 CloudFront 分配。但是，如果您想在不使用 Route 53 的情况下使用 CloudFront 提供托管在 Amazon S3 存储桶中的内容，请参阅 [Amazon CloudFront Tutorials: Setting up a Dynamic Content Distribution for Amazon S3](https://www.amazonaws.cn/cloudfront/getting-started/S3/)。在使用 CloudFront 提供托管在 Amazon S3 存储桶中的内容时，您可以使用任何存储桶名称，并且同时支持 HTTP 和 HTTPS。

**使用 Amazon CloudFormation 模板自动执行设置过程**  
有关使用 Amazon CloudFormation 模板配置安全静态网站以创建 CloudFront 分配来为您的网站提供服务的更多信息，请参阅《*Amazon CloudFront 开发人员指南*》中的[安全静态网站入门](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/getting-started-secure-static-website-cloudformation-template.html)。

**Topics**
+ [步骤 1：创建 CloudFront 分配](#create-distribution)
+ [步骤 2：更新域和子域的记录集](#update-record-sets)
+ [（可选）步骤 3：检查日志文件](#check-log-files)

## 步骤 1：创建 CloudFront 分配
<a name="create-distribution"></a>

首先，创建 CloudFront 分配。这将使您的网站可供全球各地的数据中心使用。

**使用 Amazon S3 源创建分配**

1. 通过 打开 CloudFront 控制台[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)

1. 选择 **Create Distribution**。

1. 在 **Create Distribution**（创建分配）页面上的 **Origin Settings**（源设置）部分中，对于 **Origin Domain Name**（源域名），输入您的存储桶的 Amazon S3 网站端点，例如 **example.com.s3-website.us-west-1.amazonaws.com**。

   CloudFront 将为您填写 **Origin ID (源 ID)**。

1. 对于 **Default Cache Behavior Settings (默认缓存行为设置)**，将值保留设置为默认值。

   当为**查看器协议策略**使用默认设置时，您可以为静态网站使用 HTTPS。有关这些配置选项的更多信息，请参阅《Amazon CloudFront 开发人员指南》**中的[您创建或更新 Web 分配时指定的值](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/WorkingWithDownloadDistributions.html#DownloadDistValuesYouSpecify)。

1. 对于 **Distribution Settings**，执行以下操作：

   1. 将 **Price Class (价格级别)** 的设置保留为 **Use All Edge Locations (Best Performance) (使用所有节点 (最佳性能))**。

   1. 将 **Alternate Domain Names (CNAMEs)**（备用域名(CNAME)） 设置为根域和 `www` 子域。在本教程中，它们是 `example.com` 和 `www.example.com`。
**重要**  
在执行该步骤之前，请注意[使用备用域名的要求](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-requirements)，尤其是需要使用有效的 SSL/TLS 证书。

   1. 对于 **SSL 证书**，选择**自定义 SSL 证书 (example.com)**，然后选择涵盖域名和子域名的自定义证书。

      有关更多信息，请参阅《Amazon CloudFront 开发人员指南》**中的 [SSL 证书](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesSSLCertificate)。

   1. 在 **Default Root Object (默认根对象)** 中，输入索引文档的名称，例如 `index.html`。

      如果用于访问分配的 URL 不包含文件名，CloudFront 分配将返回索引文档。**Default Root Object (默认根对象)** 应该与静态网站的索引文档的名称完全匹配。有关更多信息，请参阅 [配置索引文档](IndexDocumentSupport.md)。

   1. 将 **Logging (日志记录)** 设置为 **On (打开)**。
**重要**  
当您创建或更新分配并启用 CloudFront 日志记录时，CloudFront 会更新存储桶访问控制列表（ACL），以提供 `awslogsdelivery` 账户 `FULL_CONTROL` 权限，从而将日志写入您的存储桶。有关更多信息，请参阅 *Amazon CloudFront Developer Guide*（Amazon CloudFront 开发人员指南）中的 [Permissions required to configure standard logging and to access your log files](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership)（配置标准日志和访问日志文件所需的权限）。如果存储日志的存储桶使用 S3 对象所有权的强制存储桶拥有者设置来禁用 ACL，则 CloudFront 无法将日志写入存储桶。有关更多信息，请参阅 [为您的存储桶控制对象所有权和禁用 ACL。](about-object-ownership.md)。

   1. 对于 **Bucket for Logs**，选择您创建的日志记录存储桶。

      有关配置日志记录存储桶的更多信息，请参阅[（可选）记录 Web 流量](LoggingWebsiteTraffic.md)。

   1. 如果您要将由流量生成的日志存储到文件夹中的 CloudFront 分配，请在 **Log Prefix (日志前缀)** 中键入文件夹名称。

   1. 将所有其他设置保留为默认值。

1. 选择 **Create Distribution**。

1. 要查看分配的状态，请在控制台中找到该分配，然后检查 **Status** 列。

   `InProgress` (进行中) 状态表示分配尚未完成部署。

   分配部署完毕后，您可以使用新的 CloudFront 域名来引用您的内容。

1. 记录 CloudFront 控制台中显示的 **Domain Name (域名)** 值，例如 `dj4p1rv6mvubz.cloudfront.net`。

1. 要验证您的 CloudFront 分配是否正常运行，请在 Web 浏览器中输入该分配的域名。

   如果您的网站是可见的，则 CloudFront 分配正常工作。如果您的网站具有向 Amazon Route 53 注册的自定义域，您将需要 CloudFront 域名来在下一步更新记录集。

## 步骤 2：更新域和子域的记录集
<a name="update-record-sets"></a>

现在您已成功地创建 CloudFront 分配，请更新 Route 53 中的别名记录以指向新的 CloudFront 分配。

**更新别名记录以指向 CloudFront 分配**

1. 通过以下网址打开 Route 53 控制台：[https://console.aws.amazon.com/route53/](https://console.amazonaws.cn/route53/)。

1. 在左侧导航中，选择 **Hosted zones（托管区）**。

1. 在 **Hosted Zones（托管区）**页上，选择为您的子域创建的托管区域，例如 `www.example.com`。

1. 在 **Records（记录）**下，选择您为子域创建的 *A* 记录。

1. 在 **Record details（记录详细信息）**下，选择 **Edit record（编辑记录）**。

1. 在 **Route traffic to（将流量路由至）**下，选择 **Alias to CloudFront distribution（别名到 CloudFront 分配）**。

1. 在 **Choose distribution（选择分配）**下，选择 CloudFront 分配。

1. 选择 **Save**。

1. 要将根域的 *A* 记录重定向到 CloudFront 分配，请对根域重复此过程，例如 `example.com`。

   记录集的更新需要 2 – 48 小时才能生效。

1. 要查看新的 *A* 记录是否已生效，请在 Web 浏览器中输入您的子域 URL，例如 `http://www.example.com`。

   如果您的浏览器不再重定向至根域（例如，`http://example.com`），则说明新的 A 记录已生效。当新 *A* 记录生效时，由新 *A* 记录路由到 CloudFront 分配的流量不会重定向到根域。任何使用 `http://example.com` 或 `http://www.example.com` 引用站点的访问者都会重定向到最近的 CloudFront 边缘站点，在这里可体验更快速的下载。
**提示**  
浏览器可以缓存重定向设置。如果您认为新的 *A* 记录设置应该已经生效，但是您的浏览器仍然将 `http://www.example.com` 重定向至 `http://example.com`，请尝试清除浏览器的历史记录和缓存，然后关闭再重新打开浏览器应用程序，或使用其他 Web 浏览器。

## （可选）步骤 3：检查日志文件
<a name="check-log-files"></a>

访问日志会告诉您有多少人正在访问网站。它们还包含有价值的业务数据，您可以使用 [Amazon EMR](https://docs.amazonaws.cn/emr/latest/DeveloperGuide/) 等其他服务分析这些数据。

CloudFront 日志存储在您在创建 CloudFront 分配并启用日志记录时所选择的存储桶和文件夹中。CloudFront 将在相应请求提出后的 24 小时内将日志写入您的日志存储桶。

**查看网站的日志文件**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 为网站选择日志记录存储桶的名称。

1. 选择 CloudFront 日志文件夹。

1. 先下载由 CloudFront 编写的 `.gzip` 文件，然后再打开这些文件。

   如果您仅出于练习目的创建网站，则可以删除您所分配的资源，使其不再产生费用。为此，请参阅 [清理示例资源](getting-started-cleanup.md)。删除 Amazon 资源后，您的网站将不再可用。