使用注册到 Route 53 的自定义域配置静态网站 - Amazon Simple Storage Service

使用注册到 Route 53 的自定义域配置静态网站

假设您要在 Amazon S3 上托管您的静态网站。您使用 Amazon Route 53 注册了一个域(如 example.com),希望从 Amazon S3 内容响应对 http://www.example.comhttp://example.com 的请求。您可以使用本演练了解如何托管静态网站以及在 Amazon S3 上为具有注册到 Route 53 的自定义域名的网站创建重定向。您可以使用要在 Amazon S3 上托管的现有网站,也可以使用本演练从头开始。

完成本演练后,您可以选择使用 Amazon CloudFront 来提高网站的性能。有关更多信息,请参阅使用 Amazon CloudFront 为网站提速

注意

Amazon S3 不支持对该网站进行 HTTPS 访问。如果要使用 HTTPS,则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。

有关详细信息,请参阅如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务以及需要 HTTPS 以便在 CloudFront 与您的 Amazon S3 源之间进行通信

开始前的准备工作

在按照此示例中的步骤操作时,您将使用以下服务:

Amazon Route 53 – 您使用 Route 53 注册域,并定义要将您的域的 Internet 流量路由到何处。此示例介绍如何创建 Route 53 别名记录,以便将您的域 (example.com) 和子域 (www.example.com) 的流量路由到包含 HTML 文件的 Amazon S3 存储桶。

Amazon S3 – 您将使用 Amazon S3 创建存储桶,上传示例网页,配置权限以便每个人都可以查看内容,然后为网站托管配置存储桶。

步骤 1:将自定义域注册到 Route 53

如果您还没有已注册的域名(如 example.com),则可向 Route 53 注册一个域名。有关更多信息,请参阅 Amazon Route 53 开发人员指南 中的注册新域。注册您的域名后,您可以创建和配置 Amazon S3 存储桶用于网站托管。

步骤 2:创建两个存储桶

要同时支持来自根域和子域的请求,您需要创建以下两个存储桶。

  • 域存储桶example.com

  • 子域存储桶www.example.com

这两个存储桶的名称必须与您的域名完全匹配。在此示例中,域名为 example.com。您将您的内容托管在根域存储桶 (example.com) 之外。您为子域存储桶 (www.example.com) 创建重定向请求。如果有人在其浏览器输入 www.example.com,他们将重定向到 example.com 并看到以该名称存储在 Amazon S3 存储桶中的内容。

为网站托管创建存储桶

以下说明概述了如何创建存储桶以用于网站托管。有关创建存储桶的详细分步说明,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何创建 S3 存储桶?

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择根域存储桶:

    1. 选择 Create bucket (创建存储桶)

    2. Bucket name (存储桶名称) 中输入名称(例如,example.com)。

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

      选择一个靠近您的区域可最大程度地减少延迟和成本或满足法规要求。您选择的区域决定了您的 Amazon S3 网站终端节点。有关更多信息,请参阅网站终端节点

    4. 要接受默认设置并创建存储桶,请选择 Create (创建)

  3. 创建您的子域存储桶:

    1. 选择 Create bucket (创建存储桶)

    2. Bucket name (存储桶名称) 中输入名称(例如,www.example.com)。

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

      选择一个靠近您的区域可最大程度地减少延迟和成本或满足法规要求。您选择的区域决定了您的 Amazon S3 网站终端节点。有关更多信息,请参阅网站终端节点

    4. 要接受默认设置并创建存储桶,请选择 Create (创建)

在下一步中,您配置 example.com 进行网站托管。

步骤 3:为网站托管配置根域存储桶

在此步骤中,您将根域存储桶 (example.com) 配置为网站。该存储桶将包含您的网站内容。配置存储桶用于网站托管时,您可以使用网站终端节点访问网站。

启用静态网站托管

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Bucket name 列表中,选择要用于静态网站的存储桶。

  3. 选择属性

  4. 选择 Static website hosting

  5. 选择 Use this bucket to host a website (使用此存储桶托管网站)

  6. 输入您的索引文档的名称。

    索引文档名称通常为 index.html。索引文档名称区分大小写,并且必须与您计划上传到 S3 存储桶的 HTML 索引文档的文件名完全匹配。有关更多信息,请参阅配置索引文档

  7. (可选)如果要添加自定义错误文档,请在 Error document (错误文档) 框中输入错误文档的键名称(例如 error.html)。

    错误文档名称区分大小写,并且必须与您计划上传到 S3 存储桶的 HTML 错误文档的文件名完全匹配。有关更多信息,请参阅 (可选)配置自定义错误文档

  8. (可选)如果要指定高级重定向规则,请在 Edit redirection rules 中,使用 XML 来描述规则。

    有关更多信息,请参阅 配置高级条件重定向

  9. Static website hosting (静态网站托管) 下,记下 Endpoint (终端节点)

    Endpoint (终端节点) 是存储桶的 Amazon S3 网站终端节点。将存储桶配置为静态网站后,您可以使用此终端节点来测试您的网站。

  10. 选择保存

在下一步中,您将子域 (www.example.com) 配置为将请求重定向到您的域 (example.com)。

步骤 4:为网站重定向配置子域存储桶

在为网站托管配置了根域存储桶后,可以将子域存储桶配置为将所有请求重定向到该域。在此示例中,对 www.example.com 的所有请求都重定向到 example.com

配置重定向请求

  1. 在 Amazon S3 控制台的 Buckets (存储桶) 列表中,选择您的子域存储桶(在本例中为 www.example.com)。

  2. 选择属性

  3. 选择 Static website hosting

  4. 选择 Redirect requests

  5. Target bucket or domain (目标存储桶或域) 框中,输入您的域(例如 example.com)。

  6. Protocol (协议) 框中,输入 http

  7. 选择 Save

步骤 5:配置网站流量的日志记录

如果想要跟踪访问您的网站的访问者人数,则可以选择对根域存储桶启用日志记录。有关更多信息,请参阅 Amazon S3 服务器访问日志记录。如果您打算使用 Amazon CloudFront 来提高网站速度,也可以使用 CloudFront 日志记录。

为根域存储桶启用服务器访问日志记录

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 例如,在您创建存储桶(配置为静态网站)的同一区域中,创建用于日志记录的存储桶(例如 logs.example.com)。

  3. 为服务器访问日志记录日志文件创建文件夹(例如,logs)。

  4. (可选)如果要使用 CloudFront 提高网站性能,请为 CloudFront 日志文件创建一个文件夹(例如,cdn)。

  5. Bucket (存储桶) 列表中,选择您的根域存储桶。

  6. 选择属性

  7. 选择 Server access logging

  8. 选择启用日志记录

  9. 对于 Target Bucket (目标存储桶),选择您为日志文件创建的存储桶,例如 logs.example.com

  10. 对于 Target prefix (目标前缀),输入您为日志文件创建的文件夹的名称,后跟分隔符 (/),例如 logs/

    设置 Target prefix (目标前缀) 时,您可以将日志数据文件分组到一个文件夹中,以便于查找这些文件。

  11. 选择保存

    在日志存储桶中,您现在可以访问日志。Amazon S3 每 2 小时将网站访问日志写入您的日志存储桶。

  12. 要查看日志,请选择 Overview (概览),然后选择文件夹。

步骤 6:上传索引和网站内容

在此步骤中,您可以将索引文档和可选网站内容上传到您的根域存储桶。

当您为存储桶启用静态网站托管时,请输入索引文档的名称(例如,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>
  2. 在本地保存此索引文件,并记下文件名(例如,index.html)。

    当您启用静态网站托管并输入索引文档名称时,您可以输入此确切的文件名(例如,index.html)。

  3. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  4. Buckets (存储桶) 列表中,选择要用于托管静态网站的存储桶的名称。

  5. 为您的存储桶启用静态网站托管,并输入索引文档的确切名称(例如 index.html)。有关更多信息,请参阅启用网站托管

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

  6. 要将索引文档上传到存储桶,请执行以下操作之一:

    • 将索引文件拖放到控制台存储桶列表中。

    • 选择 Upload (上传),然后按照提示选择并上传索引文件。

    有关分步说明,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何将文件和文件夹上传到 Amazon S3 存储桶?

  7. (可选)将其他网站内容上传到您的存储桶。

步骤 7:编辑阻止公有访问设置

在此示例中,您编辑域存储桶 (example.com) 的阻止公有访问设置以允许公有访问。

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

警告

在完成此步骤之前,请查看使用 Amazon S3 阻止公有访问,以确保您了解并接受允许进行公有访问所涉及的风险。当您关闭阻止公有访问设置以使您的存储桶变为公有时,Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。

  1. https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。

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

  3. 选择 Permissions

  4. 选择 Edit

  5. 清除 Block all public access,然后选择 Save

    警告

    在完成此步骤之前,请查看使用 Amazon S3 阻止公有访问,以确保您了解并接受允许进行公有访问所涉及的风险。当您关闭阻止公有访问设置以使您的存储桶变为公有时,Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。

  6. 在确认框中,输入 confirm,然后选择 Confirm

    S3 buckets (S3 存储桶) 下,存储桶的 Access (访问权限) 更新为Objects can be public (对象可以是公有的)。现在,您即可添加一条存储桶策略,使存储桶中的对象公开可读。如果 Access (访问权限) 仍显示为 Bucket and objects not public (存储桶和对象不是公有的),您可能必须编辑账户的阻止公有访问设置,然后再添加存储桶策略。

步骤 8:附加存储桶策略

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

重要

下面的策略仅供举例说明,仍允许完全访问您存储桶的内容。在继续执行此步骤之前,请查看如何保护 Amazon S3 存储桶中的文件?,以确保您了解保护 S3 存储桶中文件的最佳实践以及授予公有访问权限所涉及的风险。

  1. Buckets (存储桶) 下,选择存储桶的名称。

  2. 选择 Permissions

  3. 选择存储桶策略

  4. 要授予对网站的公有读取访问权限,请复制以下存储桶策略,将其粘贴到 Bucket policy editor (存储桶策略编辑器) 中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::example.com/*" ] } ] }
  5. 更新 Resource 以包含您的存储桶名称。

    在前面的示例存储桶策略中, example.com 是存储桶名称。要将此存储桶策略用于您自己的存储桶,您必须更新此名称以匹配您的存储桶名称。

  6. 选择保存

    此时将显示一条警告,指示存储桶具有公有访问权限。在 Bucket Policy (存储桶策略) 上,将显示一个 Public (公有) 标签。

    如果您看到显示 Policy has invalid resource 的错误,请确认存储桶策略中的存储桶名称与您的存储桶名称匹配。有关添加存储桶策略的信息,请参阅如何添加 S3 存储桶策略?

    如果您收到 Error - Access denied (错误 - 拒绝访问) 警告,且 Bucket policy editor (存储桶策略编辑器) 不允许您保存存储桶策略,请检查您的账户级和存储桶级阻止公有访问设置,以确认您允许对存储桶进行公有访问。

在下一步中,您可以找出您的网站终端节点并测试您的域终端节点。

步骤 9:测试您的域终端节点

在将您的域存储桶配置为托管公有网站之后,可以测试您的终端节点。有关更多信息,请参阅网站终端节点。您只能测试域存储桶的终端节点,因为您的子域存储桶是为网站重定向(而不是静态网络托管)设置的。

注意

Amazon S3 不支持对该网站进行 HTTPS 访问。如果要使用 HTTPS,则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。

有关详细信息,请参阅如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务以及需要 HTTPS 以便在 CloudFront 与您的 Amazon S3 源之间进行通信

测试您的网站终端节点

如果您在启用静态网站托管时记下了您的网站终端节点,要测试您的网站,请在浏览器中输入网站终端节点。如果您的浏览器显示了 index.html 页面,则该网站已成功部署。有关更多信息,请参阅 Amazon S3 网站终端节点

如果您需要在测试之前获取网站终端节点,请按照下列步骤操作:

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,选择要用于托管静态网站的存储桶的名称。

  3. 选择属性

  4. 选择 Static website hosting

  5. 要测试您的网站终端节点,请在 Endpoint (终端节点) 旁边选择您的网站终端节点。

    如果您的浏览器显示了 index.html 页面,则该网站已成功部署。

接下来,您使用 Amazon Route 53 使客户能够使用这两个自定义 URL 导航到您的站点。

步骤 10:为您的域和子域添加别名记录

在此步骤中,您创建别名记录并将其添加到您的域的托管区域,而这些别名记录将映射 example.comwww.example.com。该别名记录使用 Amazon S3 网站终端节点,而不使用 IP 地址。Amazon Route 53 在该别名记录与 Amazon S3 存储桶所在的 IP 地址之间保持一种映射。您创建两个别名记录,一个用于根域,一个用于子域。

为您的根域 (example.com) 添加别名记录

  1. 通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

    注意

    如果您尚未使用 Route 53,请参阅Amazon Route 53 开发人员指南中的步骤 1:注册域。完成设置后,可继续按说明操作。

  2. 选择 Hosted Zones (托管区域)

  3. 在托管区域列表中,选择与您的域名匹配的托管区域的名称。

  4. 选择 Create Record Set

  5. 指定以下值:

    名称

    接受默认值,该值为您的托管区域和您的域的名称。

    对于根域,您不需要在 Name (名称) 字段中输入任何其他信息。

    类型

    选择 A – IPv4 地址

    别名

    选择

    别名目标

    在列表的 S3 website endpoints (S3 网站终端节点) 部分,选择您的存储桶名称。

    存储桶名称应与 Name (名称) 框中显示的名称相匹配。例如,在 Alias Target (别名目标) 列表中,存储桶名称后跟在其中创建存储桶的区域的 Amazon S3 网站终端节点,例如 example.com (s3-website-us-west-2)Alias Target (别名目标) 会在以下情况下列出存储桶:

    • 您已将存储桶配置为静态网站。

    • 存储桶名称与您正在创建的记录的名称相同。

    • 当前 AWS 账户创建了存储桶。

    如果您的存储桶未显示在 Alias Target (别名目标) 列表中,请输入在其中创建存储桶的区域的 Amazon S3 网站终端节点,例如 s3-website-us-west-2。有关 Amazon S3 网站终端节点的完整列表,请参阅 Amazon S3 网站终端节点。有关别名目标的更多信息,请参阅 Amazon Route 53 开发人员指南 中的别名目标

    路由策略

    接受默认值 Simple

    Evaluate Target Health

    接受默认值 No

  6. 选择 Create

为您的子域添加别名记录 (www.example.com)

  1. 在您的根域 (example.com) 的托管区域中,选择 Create Record Set (创建记录集)

  2. 指定以下值:

    名称

    对于子域,在框中输入 www

    类型

    选择 A – IPv4 地址

    别名

    选择

    别名目标

    在列表的 S3 website endpoints (S3 网站终端节点) 部分中,选择 Name (名称) 字段中显示的相同存储桶名称,例如 www.example.com (s3-website-us-west-2)

    路由策略

    接受默认值 Simple

    Evaluate Target Health

    接受默认值 No

  3. 选择 Create

注意

更改通常在 60 秒内传播到所有 Route 53 服务器。传播完成后,您可以使用在此步骤中创建的别名记录的名称将流量路由到 Amazon S3 存储桶。

步骤 11:测试网站

验证网站和重定向正常工作。在浏览器中,输入 URL。在本示例中,可以尝试以下 URL:

  • (http://example.com) – 显示 example.com 存储桶中的索引文档。

  • 子域 (http://www.example.com) – 将您的请求重定向到 http://example.com。您会在 example.com 存储桶中看到索引文档。

在某些情况下,您可能需要清除 Web 浏览器的缓存才能看到预期行为。

您可以设置 Amazon CloudFront 分发以提高网站的性能,并提供可用于查看网站流量的日志。有关更多信息,请参阅使用 Amazon CloudFront 为网站提速