教程:使用注册到 Route 53 的自定义域配置静态网站
假设您要在 Amazon S3 上托管静态网站。您向 Amazon Route 53 注册了一个域(如 example.com
),希望从 Amazon S3 内容响应对 http://www.example.com
和 http://
的请求。您可以使用本演练了解如何托管静态网站以及在 Amazon S3 上为具有注册到 Route 53 的自定义域名的网站创建重定向。您可以使用要在 Amazon S3 上托管的现有网站,也可以使用本演练从头开始。example.com
完成本演练后,您可以选择使用 Amazon CloudFront 来提高网站的性能。有关更多信息,请参阅 使用 Amazon CloudFront 为网站提速。
注意
Amazon S3 网站端点不支持 HTTPS 或接入点。如果要使用 HTTPS,则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。
有关如何使用 CloudFront 和 Amazon S3 安全地托管内容的教程,请参阅教程:使用 Amazon S3、Amazon CloudFront 和 Amazon Route 53 托管点播流视频。有关更多信息,请参阅如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务?
使用 Amazon CloudFormation 模板自动设置静态网站
可以使用 Amazon CloudFormation 模板自动设置静态网站。Amazon CloudFormation 模板设置托管安全静态网站所需的组件,这样您便能更多地关注网站内容而不是配置组件。
Amazon CloudFormation 模板包含以下组件:
Amazon S3 – 创建一个 Amazon S3 存储桶来托管静态网站。
CloudFront – 创建 CloudFront 分配来为静态网站提速。
Lambda@Edge – 使用 Lambda@Edge 向每个服务器响应添加安全标头。安全标头是 Web 服务器响应中的一组标头,它们告诉 Web 浏览器采取额外的安全预防措施。有关更多信息,请参阅博客文章:使用 Lambda@Edge 和 Amazon CloudFront 添加 HTTP 安全标头
。
此 Amazon CloudFormation 模板可供您下载和使用。有关信息和说明,请参阅《Amazon CloudFront 开发人员指南》中的安全静态网站入门。
主题
开始前的准备工作
在按照此示例中的步骤操作时,您将使用以下服务:
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 Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
选择根域存储桶:
请选择 Create bucket(创建存储桶)。
输入 Bucket name(存储桶名称)(例如
example.com
)。请选择要在其中创建存储桶的区域。
请选择一个在地理上靠近您的区域可最大程度地减少延迟和成本,或满足法规要求。您选择的区域决定了您的 Amazon S3 网站端点。有关更多信息,请参阅 网站端点。
要接受默认设置并创建存储桶,请选择 Create(创建)。
-
创建您的子域存储桶:
请选择 Create bucket(创建存储桶)。
输入 Bucket name(存储桶名称)(例如
www.example.com
)。请选择要在其中创建存储桶的区域。
请选择一个在地理上靠近您的区域可最大程度地减少延迟和成本,或满足法规要求。您选择的区域决定了您的 Amazon S3 网站端点。有关更多信息,请参阅 网站端点。
要接受默认设置并创建存储桶,请选择 Create(创建)。
在下一步中,您配置 example.com
进行网站托管。
步骤 3:为网站托管配置根域存储桶
在此步骤中,您将根域存储桶(example.com
)配置为网站。该存储桶将包含您的网站内容。为网站托管配置存储桶时,您可以使用网站端点访问网站。
启用静态网站托管
-
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在存储桶列表中,请选择要为其启用静态网站托管的存储桶的名称。
-
选择属性。
-
在静态网站托管下,请选择编辑。
-
请选择使用此存储桶托管网站。
-
在静态网站托管下,请选择启用。
-
在 Index document (索引文档) 中,输入索引文档的文件名,通常为
index.html
。索引文档名称区分大小写,并且必须与您计划上传到 S3 存储桶的 HTML 索引文档的文件名完全匹配。当您为网站托管配置存储桶时,您必须指定索引文档。当对根域或任何子文件夹发出请求时,Amazon S3 将返回此索引文档。有关更多信息,请参阅 配置索引文档。
-
要为 4XX 类错误提供您自己的自定义错误文档,请在错误文档中输入自定义错误文档文件名。
错误文档名称区分大小写,并且必须与您计划上传到 S3 存储桶的 HTML 错误文档的文件名完全匹配。如果未指定自定义错误文档并发生错误,Amazon S3 返回默认 HTML 错误文档。有关更多信息,请参阅 配置自定义错误文档。
-
(可选)如果要指定高级重定向规则,请在 Redirection rules(重定向规则)中,输入 JSON 来描述规则。
例如,您可以根据请求中的特定对象键名或前缀按条件路由请求。有关更多信息,请参阅 配置重新导向规则以使用高级条件重新导向。
-
选择 Save changes(保存更改)。
Amazon S3 为您的存储桶启用静态网站托管。在页面底部的静态网站托管下,您可以看到存储桶的网站端点。
-
在静态网站托管下,记下端点。
端点是存储桶的 Amazon S3 网站端点。将存储桶配置为静态网站后,您可以使用此端点来测试您的网站。
在编辑屏蔽公共访问权限设置并添加允许公有读取访问的存储桶策略后,您可以使用网站端点访问您的网站。
在下一步中,您将子域 (www.example.com
) 配置为将请求重定向到您的域 (example.com
)。
步骤 4:为网站重定向配置子域存储桶
在为网站托管配置了根域存储桶后,可以将子域存储桶配置为将所有请求重定向到该域。在此示例中,对 www.example.com
的所有请求都重定向到 example.com
。
配置重定向请求
-
在 Amazon S3 控制台上的 Buckets(存储桶)列表中,请选择您的子域存储桶名称(在本例中为
www.example.com
)。 -
请选择属性。
-
在静态网站托管下,选择编辑。
-
请选择 Redirect requests for an object(重新导向对于对象的请求)。
-
在 Target bucket(目标存储桶)框中,输入您的根域(例如
example.com
)。 -
对于 Protocol(协议),请选择 http。
-
选择保存更改。
步骤 5:配置网站流量的日志记录
如果想要跟踪访问您的网站的访问者人数,则可以选择对根域存储桶启用日志记录。有关更多信息,请参阅 使用服务器访问日志记录来记录请求。如果您计划使用 Amazon CloudFront 来为网站提速,也可以使用 CloudFront 日志记录。
为根域存储桶启用服务器访问日志记录
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
例如,在您创建存储桶(配置为静态网站)的同一区域中,创建用于日志记录的存储桶(例如
logs.example.com
)。 -
为服务器访问日志记录日志文件创建文件夹(例如,
logs
)。 -
(可选)如果要使用 CloudFront 提高网站性能,请为 CloudFront 日志文件创建一个文件夹(例如,
cdn
)。重要
当您创建或更新分配并启用 CloudFront 日志记录时,CloudFront 会更新存储桶访问控制列表(ACL),以提供
awslogsdelivery
账户授予将日志写入存储桶的FULL_CONTROL
权限。有关更多信息,请参阅 Amazon CloudFront Developer Guide(Amazon CloudFront 开发人员指南)中的 Permissions required to configure standard logging and to access your log files(配置标准日志和访问日志文件所需的权限)。如果存储日志的存储桶使用 S3 对象所有权的强制存储桶拥有者设置来禁用 ACL,则 CloudFront 无法将日志写入存储桶。有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。。 -
在 Buckets(存储桶)列表中,请选择您的根域存储桶。
-
请选择属性。
-
在 Server access logging(服务器访问日志记录)下,请选择 Edit(编辑)。
-
请选择 Enable。
-
在 Target bucket(目标存储桶)下,请选择服务器访问日志的存储桶和文件夹目标:
-
浏览到文件夹和存储桶位置:
-
请选择 Browse S3(浏览 S3)。
-
请选择存储桶名称,然后选择日志文件夹。
-
请选择 Choose path(选择路径)。
-
-
输入 S3 存储桶路径,例如
s3://logs.example.com/logs/
。
-
-
选择保存更改。
在日志存储桶中,您现在可以访问日志。Amazon S3 每 2 小时将网站访问日志写入您的日志存储桶一次。
步骤 6:上传索引和网站内容
在此步骤中,您可以将索引文档和可选网站内容上传到您的根域存储桶。
当您为存储桶启用静态网站托管时,您可以输入索引文档的名称(例如,index.html
)。为存储桶启用静态网站托管后,您可以将具有此索引文档名称的 HTML 文件上传到存储桶。
配置索引文档
-
创建
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>
-
将索引文件保存在本地。
索引文档文件名必须与您在静态网站托管对话框中输入的索引文档名称完全匹配。索引文档名称区分大小写。例如,如果在静态网站托管对话框中为索引文档名称输入
index.html
,则索引文档文件名也必须是index.html
,而不是Index.html
。 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 在存储桶列表中,请选择要用于托管静态网站的存储桶的名称。
-
为您的存储桶启用静态网站托管,并输入索引文档的确切名称(例如
index.html
)。有关更多信息,请参阅 启用网站托管。启用静态网站托管后,继续执行步骤 6。
-
要将索引文档上传到存储桶,请执行以下操作之一:
将索引文件拖放到控制台存储桶列表中。
选择上传,然后按照提示选择并上传索引文件。
如需分步指导,请参阅 上传对象。
-
(可选)将其他网站内容上传到您的存储桶。
步骤 7:上传错误文档
当您为存储桶启用静态网站托管时,请输入错误文档的名称(例如,404.html
)。为存储桶启用静态网站托管后,您可以将具有此错误文档名称的 HTML 文件上传到存储桶。
要配置错误文档
-
创建错误文档,例如
404.html
。 -
将错误文档文件保存在本地。
错误文档名称区分大小写,必须与启用静态网站托管时输入的名称完全匹配。例如,如果在静态网站托管对话框中为错误文档名称输入
404.html
,则错误文档文件名也必须是404.html
。 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 在存储桶 列表中,选择要用于托管静态网站的存储桶的名称。
-
为您的存储桶启用静态网站托管,并输入错误文档的确切名称(例如
404.html
)。有关更多信息,请参阅启用网站托管 和配置自定义错误文档。启用静态网站托管后,继续执行步骤 6。
-
要将错误文档上传到存储桶,请执行以下操作之一:
将错误文档文件拖放到控制台存储桶列表中。
选择上传,然后按照提示选择并上传索引文件。
如需分步指导,请参阅 上传对象。
步骤 8:编辑 S3 屏蔽公共访问权限设置
在此示例中,您编辑域存储桶(example.com
)的屏蔽公共访问权限设置以允许公有访问。
默认情况下,Amazon S3 阻止对您的账户和存储桶的公有访问权限。如果要使用存储桶托管静态网站,您可以使用以下步骤编辑您的屏蔽公共访问权限设置。
警告
在完成这些步骤之前,请查看阻止对您的 Amazon S3 存储的公有访问,来确保您了解并接受支持公共访问权限所涉及的风险。当您关闭屏蔽公共访问权限设置以使您的存储桶变为公有时,Internet 上的任何人都可以访问您的存储桶。我们建议您阻止对存储桶的所有公有访问。
-
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
请选择已配置为静态网站的存储桶的名称。
-
选择权限。
-
在屏蔽公共访问权限(存储桶设置)下,请选择编辑。
-
清除阻止所有公有访问,然后选择保存更改。
Amazon S3 关闭了存储桶的屏蔽公共访问权限设置。要创建公有静态网站,可能还必须为您的账户配置屏蔽公共访问权限设置,然后再添加存储桶策略。如果当前已开启账户的屏蔽公共访问权限设置,您将在屏蔽公共访问权限(存储桶设置)下看到一条备注。
步骤 9:附加存储桶策略
在此示例中,您将存储桶策略附加到域存储桶(example.com
)以允许进行公有读取访问。例如,您可以将示例存储桶策略中的 Bucket-Name
替换为域存储桶的名称,例如 example.com
。
在编辑 S3 屏蔽公共访问权限设置后,您可以添加存储桶策略以授予对存储桶的公有读取访问权限。当您授予公有读取访问权限时,Internet 上的任何人都可以访问您的存储桶。
重要
下面的策略仅供举例说明,仍允许完全访问您存储桶的内容。在继续执行此步骤之前,请查看如何保护 Amazon S3 存储桶中的文件?
-
在存储桶 下,请选择存储桶的名称。
-
选择权限。
-
在存储桶策略下,请选择编辑。
-
要授予对网站的公有读取访问权限,请复制以下存储桶策略,将其粘贴到存储桶策略编辑器中。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::
Bucket-Name
/*" ] } ] } -
将
Resource
更新为您的存储桶名称。在上述示例存储桶策略中,
Bucket-Name
是存储桶名称的占位符。要将此存储桶策略用于您自己的存储桶,您必须更新此名称以匹配您的存储桶名称。 -
选择保存更改。
此时将显示一条消息,指示存储桶策略已成功添加。
如果您看到显示
Policy has invalid resource
的错误,请确认存储桶策略中的存储桶名称与您的存储桶名称匹配。有关添加存储桶策略的信息,请参阅如何添加 S3 存储桶策略?如果您收到错误消息且无法保存存储桶策略,请检查您的账户和存储桶的屏蔽公共访问权限设置以确认您允许对存储桶进行公有访问。
在下一步中,您可以找出您的网站端点并测试您的域端点。
步骤 10:测试您的域端点
在将您的域存储桶配置为托管公有网站之后,可以测试您的端点。有关更多信息,请参阅 网站端点。您只能测试域存储桶的端点,因为您的子域存储桶是为网站重定向设置的,而不是静态网络托管。
注意
Amazon S3 不支持对该网站进行 HTTPS 访问。如果要使用 HTTPS,则可以使用 Amazon CloudFront 为 Amazon S3 上托管的静态网站提供服务。
有关更多信息,请参阅如何使用 CloudFront 为 Amazon S3 上托管的静态网站提供服务?
-
在 Buckets(存储桶)下,请选择存储桶的名称。
-
请选择属性。
-
在页面底部的 Static website hosting(静态网站托管)下,请选择 Bucket website endpoint(存储桶网站端点)。
您的索引文档将在单独的浏览器窗口中打开。
接下来,您使用 Amazon Route 53 使客户能够使用这两个自定义 URL 导航到您的站点。
步骤 11:为您的域和子域添加别名记录
在此步骤中,您创建别名记录并将其添加到您的域的托管区域,而这些别名记录将映射 example.com
和 www.example.com
。别名记录使用 Amazon S3 网站端点,而不使用 IP 地址。Amazon Route 53 保留了别名记录和 Amazon S3 存储桶所在的 IP 地址之间的映射。您创建两个别名记录,一个用于根域,一个用于子域。
为您的根域 (example.com
) 添加别名记录
通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/
。 注意
如果您尚未使用 Route 53,请参阅 Amazon Route 53 开发人员指南中的步骤 1:注册域。完成设置后,可继续按说明操作。
请选择托管区域。
-
在托管区域列表中,请选择与您的域名匹配的托管区域的名称。
-
请选择创建记录。
-
请选择切换到向导。
注意
如果要使用快速创建来创建别名记录,请参阅配置 Route 53 以将流量路由到 S3 存储桶。
-
请选择简单路由,然后选择下一步。
-
请选择定义简单记录。
-
在记录名称中,接受默认值,该值为您的托管区域和您的域的名称。
-
在值/流量路由至中,请选择向 S3 网站端点添加别名。
-
请选择区域。
-
请选择 S3 存储桶。
存储桶名称应与 Name(名称)框中显示的名称相匹配。例如,在选择 S3 存储桶列表中,存储桶名称将与创建存储桶所在区域的 Amazon S3 网站端点一起显示
s3-website-us-west-1.amazonaws.com (example.com)
。如果出现以下情况,请选择 S3 存储桶将列出一个存储桶:
您已将存储桶配置为静态网站。
存储桶名称与您正在创建的记录的名称相同。
当前 Amazon Web Services 账户 创建了存储桶。
如果您的存储桶未显示在选择 S3 存储桶列表中,请输入在其中创建存储桶的区域的 Amazon S3 网站端点,例如
s3-website-us-west-2.amazonaws.com
。有关 Amazon S3 网站端点的完整列表,请参阅 Amazon S3 网站端点。有关别名目标的更多信息,请参阅 Amazon Route 53 开发人员指南中的 值/路由流量至。 -
在 Record type (记录类型) 中,选择 A – Routes traffic to an IPv4 address and some Amazon resources (A – 将流量路由到 IPv4 地址和某些 Amazon 资源)。
-
对于评估目标运行状况,请选择否。
-
请选择定义简单记录。
为您的子域添加别名记录 (www.example.com
)
-
在配置记录下,请选择定义简单记录。
-
在子域的记录名称中,键入
www
。 -
在值/流量路由至中,请选择向 S3 网站端点添加别名。
-
请选择区域。
-
请选择 S3 存储桶,例如
s3-website-us-west-2.amazonaws.com (www.example.com)
。如果您的存储桶未显示在选择 S3 存储桶列表中,请输入在其中创建存储桶的区域的 Amazon S3 网站端点,例如
s3-website-us-west-2.amazonaws.com
。有关 Amazon S3 网站端点的完整列表,请参阅 Amazon S3 网站端点。有关别名目标的更多信息,请参阅 Amazon Route 53 开发人员指南中的 值/路由流量至。 -
在 Record type (记录类型) 中,选择 A – Routes traffic to an IPv4 address and some Amazon resources (A – 将流量路由到 IPv4 地址和某些 Amazon 资源)。
-
对于评估目标运行状况,请选择否。
-
请选择定义简单记录。
-
在配置记录页面上,请选择创建记录。
注意
更改通常在 60 秒内传播到所有 Route 53 服务器。传播完成后,您可以使用在此步骤中创建的别名记录的名称将流量路由到 Amazon S3 存储桶。
为您的根域 (example.com
) 添加别名记录
Route 53 控制台进行了重新设计。在 Route 53 控制台中,您可以暂时使用旧控制台。如果您选择使用旧 Route 53 控制台,请使用以下过程。
通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/
。 注意
如果您尚未使用 Route 53,请参阅 Amazon Route 53 开发人员指南中的步骤 1:注册域。完成设置后,可继续按说明操作。
请选择 Hosted Zones (托管区域)。
-
在托管区域列表中,请选择与您的域名匹配的托管区域的名称。
-
请选择 Create Record Set。
-
指定以下值:
- 名称
-
接受默认值,该值为您的托管区域和您的域的名称。
对于根域,您不需要在 Name (名称) 字段中输入任何其他信息。
- 类型
-
请选择 A – IPv4 address(A – IPv4 地址)。
- 别名
-
请选择是。
- 别名目标
-
在列表的 S3 website endpoints(S3 网站端点)部分,请选择您的存储桶名称。
存储桶名称应与 Name(名称)框中显示的名称相匹配。在 Alias Target(别名目标)列表中,存储桶名称后跟在其中创建存储桶的区域的 Amazon S3 网站端点,例如
example.com (s3-website-us-west-2.amazonaws.com)
。Alias Target(别名目标)会在以下情况下列出存储桶:您已将存储桶配置为静态网站。
存储桶名称与您正在创建的记录的名称相同。
当前 Amazon Web Services 账户 创建了存储桶。
如果您的存储桶未显示在 Alias Target(别名目标)列表中,请输入在其中创建存储桶的区域的 Amazon S3 网站端点,例如
s3-website-us-west-2
。有关 Amazon S3 网站端点的完整列表,请参阅 Amazon S3 网站端点。有关别名目标的更多信息,请参阅 Amazon Route 53 开发人员指南中的 值/路由流量至。 - 路由策略
-
接受默认值 Simple。
- Evaluate Target Health
-
接受默认值 No。
-
请选择创建。
为您的子域添加别名记录 (www.example.com
)
-
在您的根域 (
example.com
) 的托管区域中,请选择 Create Record Set (创建记录集)。 -
指定以下值:
- 名称
-
对于子域,在框中输入
www
。 - 类型
-
请选择 A – IPv4 address(A – IPv4 地址)。
- 别名
-
请选择是。
- 别名目标
-
在列表的 S3 website endpoints(S3 网站端点)部分中,请选择 Name(名称)字段中显示的相同存储桶名称,例如
www.example.com (s3-website-us-west-2.amazonaws.com)
。 - 路由策略
-
接受默认值 Simple。
- Evaluate Target Health
-
接受默认值 No。
-
请选择创建。
注意
更改通常在 60 秒内传播到所有 Route 53 服务器。传播完成后,您可以使用在此步骤中创建的别名记录的名称将流量路由到 Amazon S3 存储桶。
步骤 12:测试网站
验证网站和重定向正常工作。在浏览器中,输入 URL。在本示例中,可以尝试以下 URL:
-
域(
http://example.com
)– 显示example.com
存储桶中的索引文档。 -
子域 (
http://www.example.com
) – 将您的请求重定向到http://example.com
。您会在example.com
存储桶中看到索引文档。
如果您的网站或重定向链接不起作用,则可以尝试以下操作:
-
清除缓存 – 清除 Web 浏览器缓存。
-
检查名称服务器 – 如果在清除缓存后,您的网页和重定向链接无法正常工作,则可以比较域的名称服务器和托管区域的名称服务器。如果名称服务器不匹配,您可能需要更新域名服务器,以便匹配在托管区域下方列出的服务器。有关更多信息,请参阅为域添加或更改名称服务器和粘附记录。
在成功测试根域和子域后,您可以设置 Amazon CloudFront