

# 教程：在 Amazon S3 上配置静态网站
<a name="HostingWebsiteOnS3Setup"></a>

**重要**  
Amazon S3 现在将具有 Amazon S3 托管密钥的服务器端加密（SSE-S3）作为 Amazon S3 中每个存储桶的基本加密级别。从 2023 年 1 月 5 日起，上传到 Amazon S3 的所有新对象都将自动加密，不会产生额外费用，也不会影响性能。S3 存储桶默认加密配置和上传的新对象的自动加密状态可在 CloudTrail 日志、S3 清单、S3 Storage Lens 存储统计管理工具和 Amazon S3 控制台中查看，并可用作 Amazon CLI 和 Amazon SDK 中的附加 Amazon S3 API 响应标头。有关更多信息，请参阅[默认加密常见问题解答](https://docs.amazonaws.cn/AmazonS3/latest/userguide/default-encryption-faq.html)。

您可以配置 Amazon S3 存储桶，使其功能与网站相似。本示例向您演练了在 Amazon S3 上托管网站的步骤。

**重要**  
以下教程需要禁用“屏蔽公共访问权限”。我们建议将“屏蔽公共访问权限”保持为启用状态。如果要将所有四个“屏蔽公共访问权限”设置保持为启用状态并托管静态网站，则可以使用 Amazon CloudFront 来源访问控制（OAC）。Amazon CloudFront 提供了设置安全静态网站所需的功能。Amazon S3 静态网站仅支持 HTTP 端点。Amazon CloudFront 使用 Amazon S3 的持久存储，同时提供额外的安全标头，如 HTTPS。HTTPS 通过加密正常 HTTP 请求并防范常见的网络攻击来增强安全性。有关更多信息，请参阅《Amazon CloudFront 开发人员指南》**中的[安全静态网站入门](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/getting-started-secure-static-website-cloudformation-template.html)。

**Topics**
+ [步骤 1：创建存储桶](#step1-create-bucket-config-as-website)
+ [步骤 2：启用静态网站托管](#step2-create-bucket-config-as-website)
+ [步骤 3：编辑屏蔽公共访问权限设置](#step3-edit-block-public-access)
+ [步骤 4：添加可使您的存储桶内容公开可用的存储桶策略](#step4-add-bucket-policy-make-content-public)
+ [步骤 5：配置索引文档](#step5-upload-index-doc)
+ [步骤 6：配置错误文档](#step6-upload-error-doc)
+ [步骤 7：测试您的网站端点](#step7-test-web-site)
+ [步骤 8：清除](#getting-started-cleanup-s3-website-overview)

## 步骤 1：创建存储桶
<a name="step1-create-bucket-config-as-website"></a>

以下说明概述了如何创建存储桶以用于网站托管。有关创建存储桶的详细分步说明，请参阅[创建通用存储桶](create-bucket-overview.md)。

**创建存储桶**

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

1. 选择 **Create bucket（创建存储桶）**。

1. 输入 **Bucket name（存储桶名称）**（例如 **example.com**）。

1. 请选择要在其中创建存储桶的区域。

   请选择一个在地理上靠近您的区域可最大程度地减少延迟和成本，或满足法规要求。您选择的区域决定了您的 Amazon S3 网站端点。有关更多信息，请参阅 [网站端点](WebsiteEndpoints.md)。

1. 要接受默认设置并创建存储桶，请选择 **Create（创建）**。

## 步骤 2：启用静态网站托管
<a name="step2-create-bucket-config-as-website"></a>

创建存储桶后，您可以为存储桶启用静态网站托管。您可以创建新存储桶或使用现有存储桶。

**启用静态网站托管**

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

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要为其启用静态网站托管的存储桶的名称。

1. 选择**属性**。

1. 在**静态网站托管**下，请选择**编辑**。

1. 请选择**使用此存储桶托管网站**。

1. 在**静态网站托管**下，请选择**启用**。

1. 在 **Index document (索引文档)** 中，输入索引文档的文件名，通常为 `index.html`。

   索引文档名称区分大小写，并且必须与您计划上传到 S3 存储桶的 HTML 索引文档的文件名完全匹配。当您为网站托管配置存储桶时，您必须指定索引文档。当对根域或任何子文件夹发出请求时，Amazon S3 将返回此索引文档。有关更多信息，请参阅 [配置索引文档](IndexDocumentSupport.md)。

1. 要为 4XX 类错误提供您自己的自定义错误文档，请在**错误文档**中输入自定义错误文档文件名。

   错误文档名称区分大小写，并且必须与您计划上传到 S3 存储桶的 HTML 错误文档的文件名完全匹配。如果未指定自定义错误文档并发生错误，Amazon S3 返回默认 HTML 错误文档。有关更多信息，请参阅 [配置自定义错误文档](CustomErrorDocSupport.md)。

1. （可选）如果要指定高级重定向规则，请在 **Redirection rules**（重定向规则）中，输入 JSON 来描述规则。

   例如，您可以根据请求中的特定对象键名或前缀按条件路由请求。有关更多信息，请参阅 [配置重新导向规则以使用高级条件重新导向](how-to-page-redirect.md#advanced-conditional-redirects)。

1. 选择 **Save changes（保存更改）**。

   Amazon S3 为您的存储桶启用静态网站托管。在页面底部的**静态网站托管**下，您可以看到存储桶的网站端点。

1. 在**静态网站托管**下，记下**端点**。

   **端点**是存储桶的 Amazon S3 网站端点。将存储桶配置为静态网站后，您可以使用此端点来测试您的网站。

## 步骤 3：编辑屏蔽公共访问权限设置
<a name="step3-edit-block-public-access"></a>

默认情况下，Amazon S3 阻止对您的账户和存储桶的公有访问权限。如果要使用存储桶托管静态网站，您可以使用以下步骤编辑您的屏蔽公共访问权限设置。

**警告**  
在完成这些步骤之前，请查看[阻止对您的 Amazon S3 存储的公有访问](access-control-block-public-access.md)，来确保您了解并接受支持公共访问权限所涉及的风险。当您关闭屏蔽公共访问权限设置以使您的存储桶变为公有时，Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。

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

1. 请选择已配置为静态网站的存储桶的名称。

1. 选择**权限**。

1. 在**屏蔽公共访问权限（存储桶设置）**下，请选择**编辑**。

1. 清除**阻止*所有*公有访问**，然后选择**保存更改**。  
![\[Amazon S3 控制台，显示屏蔽公共访问权限存储桶设置。\]](http://docs.amazonaws.cn/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 关闭了存储桶的屏蔽公共访问权限设置。要创建公有静态网站，可能还必须[为您的账户配置屏蔽公共访问权限设置](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/block-public-access-account.html)，然后再添加存储桶策略。如果当前已开启账户的屏蔽公共访问权限设置，您将在**屏蔽公共访问权限（存储桶设置）**下看到一条备注。

## 步骤 4：添加可使您的存储桶内容公开可用的存储桶策略
<a name="step4-add-bucket-policy-make-content-public"></a>

在编辑 S3 屏蔽公共访问权限设置后，您可以添加存储桶策略以授予对存储桶的公有读取访问权限。当您授予公有读取访问权限时，Internet 上的任何人都可以访问您的存储桶。

**重要**  
下面的策略仅供举例说明，仍允许完全访问您存储桶的内容。在继续执行此步骤之前，请查看[如何保护 Amazon S3 存储桶中的文件？](https://www.amazonaws.cn/premiumsupport/knowledge-center/secure-s3-resources/)，以确保您了解保护 S3 存储桶中文件的最佳实践以及授予公有访问权限所涉及的风险。

1. 在**存储桶** 下，请选择存储桶的名称。

1. 选择**权限**。

1. 在**存储桶策略**下，请选择**编辑**。

1. 要授予对网站的公有读取访问权限，请复制以下存储桶策略，将其粘贴到**存储桶策略编辑器**中。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PublicReadGetObject",
               "Effect": "Allow",
               "Principal": "*",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::Bucket-Name/*"
               ]
           }
       ]
   }
   ```

1. 将 `Resource` 更新为您的存储桶名称。

   在上述示例存储桶策略中，*Bucket-Name* 是存储桶名称的占位符。要将此存储桶策略用于您自己的存储桶，您必须更新此名称以匹配您的存储桶名称。

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

   此时将显示一条消息，指示存储桶策略已成功添加。

   如果您看到显示 `Policy has invalid resource` 的错误，请确认存储桶策略中的存储桶名称与您的存储桶名称匹配。有关添加存储桶策略的信息，请参阅[如何添加 S3 存储桶策略？](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/add-bucket-policy.html)

   如果您收到错误消息且无法保存存储桶策略，请检查您的账户和存储桶的屏蔽公共访问权限设置以确认您允许对存储桶进行公有访问。

## 步骤 5：配置索引文档
<a name="step5-upload-index-doc"></a>

当您为存储桶启用静态网站托管时，您可以输入索引文档的名称（例如，**index.html**）。为存储桶启用静态网站托管后，您可以将具有此索引文档名称的 HTML 文件上传到存储桶。

**配置索引文档**

1. 创建 `index.html` 文件。

   如果您没有 `index.html` 文件，则可以使用以下 HTML 创建一个：

   ```
   <html xmlns="http://www.w3.org/1999/xhtml" >
   <head>
       <title>My Website Home Page</title>
   </head>
   <body>
     <h1>Welcome to my website</h1>
     <p>Now hosted on Amazon S3!</p>
   </body>
   </html>
   ```

1. 将索引文件保存在本地。

   索引文档文件名必须与您在**静态网站托管**对话框中输入的索引文档名称完全匹配。索引文档名称区分大小写。例如，如果在**静态网站托管**对话框中为**索引文档**名称输入 `index.html`，则索引文档文件名也必须是 `index.html`，而不是 `Index.html`。

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

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要用于托管静态网站的存储桶的名称。

1. 为您的存储桶启用静态网站托管，并输入索引文档的确切名称（例如 `index.html`）。有关更多信息，请参阅 [启用网站托管](EnableWebsiteHosting.md)。

   启用静态网站托管后，继续执行步骤 6。

1. 要将索引文档上传到存储桶，请执行以下操作之一：
   + 将索引文件拖放到控制台存储桶列表中。
   + 选择**上传**，然后按照提示选择并上传索引文件。

   如需分步指导，请参阅 [上传对象](upload-objects.md)。

1. （可选）将其他网站内容上传到您的存储桶。

## 步骤 6：配置错误文档
<a name="step6-upload-error-doc"></a>

当您为存储桶启用静态网站托管时，请输入错误文档的名称（例如，**404.html**）。为存储桶启用静态网站托管后，您可以将具有此错误文档名称的 HTML 文件上传到存储桶。

**要配置错误文档**

1. 创建错误文档，例如 `404.html`。

1. 将错误文档文件保存在本地。

   错误文档名称区分大小写，必须与启用静态网站托管时输入的名称完全匹配。例如，如果在**静态网站托管**对话框中为**错误文档**名称输入 `404.html`，则错误文档文件名也必须是 `404.html`。

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

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要用于托管静态网站的存储桶的名称。

1. 为您的存储桶启用静态网站托管，并输入错误文档的确切名称（例如 `404.html`）。有关更多信息，请参阅[启用网站托管](EnableWebsiteHosting.md)和[配置自定义错误文档](CustomErrorDocSupport.md)。

   启用静态网站托管后，继续执行步骤 6。

1. 要将错误文档上传到存储桶，请执行以下操作之一：
   + 将错误文档文件拖放到控制台存储桶列表中。
   + 选择**上传**，然后按照提示选择并上传索引文件。

   如需分步指导，请参阅 [上传对象](upload-objects.md)。

## 步骤 7：测试您的网站端点
<a name="step7-test-web-site"></a>

为存储桶配置静态网站托管后，您可以测试您的网站端点。

**注意**  
Amazon S3 不支持对该网站进行 HTTPS 访问。如果要使用 HTTPS，则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。  
有关更多信息，请参阅[如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务？](https://www.amazonaws.cn/premiumsupport/knowledge-center/cloudfront-serve-static-website/)以及[要求在查看器和 CloudFront 之间使用 HTTPS 进行通信](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)。

1. 在 **Buckets（存储桶）**下，请选择存储桶的名称。

1. 请选择**属性**。

1. 在页面底部的 **Static website hosting（静态网站托管）**下，请选择 **Bucket website endpoint（存储桶网站端点）**。

   您的索引文档将在单独的浏览器窗口中打开。

现在，您已拥有在 Amazon S3 上托管的网站。该网站在 Amazon S3 网站端点上可用。但是，您可能有要用来从已创建的网站提供内容的域 (如 `example.com`)。您可能还需要使用 Amazon S3 的根域支持来响应对 `http://www.example.com` 和 `http://example.com` 的请求。此操作需要其他步骤。有关示例，请参阅[教程：使用注册到 Route 53 的自定义域配置静态网站](website-hosting-custom-domain-walkthrough.md)。

## 步骤 8：清除
<a name="getting-started-cleanup-s3-website-overview"></a>

如果您仅出于练习目的创建静态网站，则删除您所分配的 Amazon 资源，使其不再产生费用。删除 Amazon 资源后，您的网站将不再可用。有关更多信息，请参阅 [删除通用存储桶](delete-bucket.md)。