通过添加备用域名 (CNAME) 使用自定义 URL - Amazon CloudFront

通过添加备用域名 (CNAME) 使用自定义 URL

在 CloudFront 中,通过使用备用域名(也称为 CNAME),您可以在文件的 URL 中使用您自己的域名(如 www.example.com),而不是使用 CloudFront 为您的分配指定的域名。

在创建分配时,CloudFront 会为该分配提供域名,例如 d111111abcdef8.cloudfront.net。

如果您想使用自己的域名(如 www.example.com),而非 cloudfront.net 域名,可以在您的分配中添加备用域名。

添加备用域名

以下任务列表描述了如何使用 CloudFront 控制台将备用域名添加到分配中,以便您可以在链接中使用自己的域名而非 CloudFront 域名。有关使用 CloudFront API 更新您的分配的信息,请参阅使用分配

注意

如果您希望查看者使用 HTTPS 和您的备用域名的,请参阅 使用备用域名和 HTTPS

开始之前: 确保执行了以下操作,然后再更新分配以添加备用域名:

  • 向 Route 53 或其他域注册商注册该域名。

  • 从包含该域名的授权证书颁发机构 (CA) 获取 SSL/TLS 证书。将证书添加至您的分配中以验证您是否有权使用该域。有关更多信息,请参阅使用备用域名的要求

添加备用域名

  1. 登录 AWS Management Console,并通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/v3/home

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

  3. General 选项卡上,选择 Edit

  4. 更新以下值:

    备用域名 (CNAME)

    添加备用域名。用逗号隔开多个域名,或在新行中键入每个域名。

    SSL 证书

    选择以下设置:

    • 使用 HTTPS – 选择自定义 SSL 证书,然后从列表中选择证书。该列表包含 AWS Certificate Manager (ACM) 预置的证书、您从另一个证书颁发机构购买并上传到 ACM 的证书以及您从另一个证书颁发机构购买并上传到 IAM 证书存储的证书。

      如果您已将证书上传到 IAM 证书存储,但该证书未显示在列表中,请检查过程 导入 SSL/TLS 证书,确认您已正确上传证书。

      如果您选择此设置,我们建议您只在对象 URL 中使用一个备用域名 (https://www.example.com/logo.jpg)。如果您使用您的 CloudFront 分配域名 (https://d111111abcdef8.cloudfront.net.cloudfront.net/logo.jpg),则查看器的工作方式可能如下所示,具体取决于您为支持的客户端选择的值:

      • 所有客户端:如果查看器不支持 SNI,它将显示警告,因为 CloudFront 域名与 TLS/SSL 证书中的域名不匹配。

      • 仅支持服务器名称指示 (SNI) 的客户端:CloudFront 将删除与查看器的连接而不返回对象。

    支持的客户

    选择一个选项:

    • 所有客户端:CloudFront 使用专用 IP 地址提供您的 HTTPS 内容。如果您选择该选项,则当您将 SSL/TLS 证书与已启用的分配关联时,将产生额外的费用。有关更多信息,请参阅 Amazon CloudFront 定价

    • 仅限支持服务器名称指示 (SNI) 的客户端:不支持 SNI 的旧版浏览器或其他客户端必须使用其他方法访问您的内容。

    有关更多信息,请参阅 选择 CloudFront 处理 HTTPS 请求的方式

  5. 选择是,编辑

  6. 在分配的 General 选项卡上,确认 Distribution Status 已更改为 Deployed。如果您试图在部署对分配的更新之前使用备用域名,您在以下步骤创建的链接可能无法正常工作。

  7. 配置备用域(例如 www.example.com)的 DNS 服务,以将流量路由到您的分配的 CloudFront 域名(如 d111111abcdef8.cloudfront.net)。您使用的方法取决于您是将 Route 53 还是另一个供应商作为域的 DNS 服务提供商。

    注意

    如果您的 DNS 记录已指向的分配并不是您要更新的分配,则您只能在更新 DNS 后才能向分配中添加备用域名。有关更多信息,请参阅 备用域名的使用限制

    Route 53

    创建别名资源记录集。有了别名资源记录集,您就不用付款进行 Route 53 查询了。此外,您可以为根域名 (example.com) 创建别名资源记录集,而 DNS 不允许 CNAME。有关更多信息,请参阅《Amazon Route 53 开发人员指南》中的使用域名将流量路由到 Amazon CloudFront Web 分配

    其他 DNS 服务提供商

    使用 DNS 服务提供商提供的方法为域添加 CNAME 记录。这一新的 CNAME 记录将来自备用域名(例如,www.example.com)的 DNS 查询重新导向到分配的 CloudFront 域名(例如,d111111abcdef8.cloudfront.net)。有关更多信息,请参阅 DNS 服务提供商提供的文档。

    重要

    如果您的域名已有现有的 CNAME 记录,请更新此记录或将其替换为指向分配的 CloudFront 域名的新记录。

  8. 使用 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 记录以指向分配的域名。

  9. 通过访问具有您的域名而不是分配的 CloudFront 域名的 URL 来测试备用域名。

  10. 在您的应用程序中,更改对象的 URL 以使用您的备用域名而不是 CloudFront 分配的域名。

将备用域名移动到其他分配

当您尝试为分配添加备用域名但备用域名已在其他分配中使用时,您会收到 CNAMEAlreadyExists 错误(您提供的一个或多个 CNAME 已与其他资源相关联)。例如,当您尝试将 www.example.com 添加到分配,但 www.example.com 已与其他分配相关联时,您会收到此错误。

在这种情况下,您需要将现有的备用域名从一个分配(源分配)移动到另一个分配(目标分配)。以下步骤概述了该过程。如需更多信息,请单击概览中每个步骤的链接。

移动备用域名

  1. 设置目标分配。此分配必须有 SSL/TLS 证书,且该证书包含您要移动的备用域名。有关更多信息,请参阅设置目标分配

  2. 查找源分配。您可以使用 AWS Command Line Interface (AWS CLI) 查找与备用域名关联的分配。有关更多信息,请参阅查找源分配

  3. 移动备用域名。执行此操作的方式取决于源分配和目标分配是否在同一 AWS 账户中。有关更多信息,请参阅移动备用域名

设置目标分配

移动备用域名之前,您必须设置目标分配,也就是您要将备用域名移动到的分配。

设置目标分配

  1. 获取包含您要移动的备用域名的 SSL/TLS 证书。如果没有,您可以从 AWS Certificate Manager (ACM) 请求一个,或从其他证书颁发机构 (CA) 获取一个并将其导入 ACM。请确保您在美国东部(弗吉尼亚北部)(us-east-1) 区域请求或导入证书。

  2. 如果您尚未创建目标分配,请立即创建一个。将您的证书(来自上一步)与分配相关联,这是创建目标分配的一个环节。有关更多信息,请参阅创建分配

    如果您已经有目标分配,请将您的证书(来自上一步)与目标分配相关联。有关更多信息,请参阅更新分配

  3. 创建 DNS TXT 记录,将备用域名与目标分配的分配域名关联起来。创建在备用域名前面添加下划线 (_) 的 TXT 记录。以下为 DNS 中的 TXT 记录示例:

    _www.example.com TXT d111111abcdef8.cloudfront.net

    CloudFront 使用此 TXT 记录来验证您对备用域名的所有权。

查找源分配

在将备用域名从一个分配移动到另一个分配之前,您应该找到源分配(备用域名当前正在使用的分配)。获取源和目标分配的AWS账户 ID 后,您即可确定如何移动备用域名。

查找备用域名的源分配

  1. 在 AWS Command Line Interface (AWS CLI)中使用 CloudFront list-conflicting-aliases 命令,如下例所示。将 www.example.com 替换为备用域名,将 EDFDVBD6EXAMPLE 替换为 您之前设置的目标分配的 ID。使用与目标分配在同一AWS账户中的凭据运行此命令。使用此命令的前提是,您必须拥有目标分配的 cloudfront:GetDistributioncloudfront:ListConflictingAlias 权限。

    aws cloudfront list-conflicting-aliases --alias www.example.com --distribution-id EDFDVBD6EXAMPLE

    该命令的输出显示了与所提供的域名冲突或重叠的所有备用域名列表。例如:

    • 如果您向命令提供 www.example.com,则命令的输出包括 www.example.com 和重叠的通配符备用域名 (*.example.com)(如果存在)。

    • 如果您向命令提供 *.example.com,则命令的输出包括 *.example.com 和该通配符涵盖的所有备用域名(例如,www.example.com、test.example.com、dev.example.com 等)。

    对于命令输出中的每个备用域名,您可以查找与其关联的分配的 ID,以及拥有此分配的AWS账户 ID。分配和账户 ID 信息是部分隐藏的,这使您可以识别您拥有的分配和账户,并有助于保护您没有所有权的分配和账户的信息。

  2. 在命令的输出中,找到您要移动的备用域名的分配,并记下源分配的AWS账户 ID。将源分配的账户 ID 与您创建目标分配的账户 ID 进行比较,并确定这两个分配是否在同一AWS账户中。这有助于您确定如何移动备用域名。

    要移动备用域名,请参阅以下主题。

移动备用域名

请根据您的具体情况,从以下方式中选择移动备用域名的方式:

如果源分配和目标分配在同一AWS账户中

使用 AWS CLI 中的 associate-alias 命令移动备用域名。此方法适用于所有同账户内移动,包括当备用域名是顶级域(也称为根域,如 example.com)时。有关更多信息,请参阅使用关联别名移动备用域名

如果源分配和目标分配在不同AWS账户中

如果您有权访问源分配,备用域名不是顶级域(也称为根域,如 example.com),并且您尚未使用与该备用域名重叠的通配符,请使用通配符移动备用域名。有关更多信息,请参阅使用通配符移动备用域名

如果您无法访问源分配的AWS账户,可以尝试使用 AWS CLI 中的 associate-alias 命令移动备用域名。如果源分配已禁用,则您可以移动备用域名。有关更多信息,请参阅使用关联别名移动备用域名

如果您要移动的备用域名是顶级域,或者您无法访问源分配的AWS账户,请联系 AWS Support。有关更多信息,请参阅联系 AWS Support 以移动备用域名

使用关联别名移动备用域名

如果源分配与目标分配在同一AWS账户中,或者如果源分配在不同的账户中但已被禁用,您可以使用 AWS CLI 中的 CloudFront associate-alias 命令移动备用域名。

使用关联别名移动备用域名

  1. 使用 AWS CLI 运行 CloudFront associate-alias 命令,如下例所示。将 www.example.com 替换为备用域名,将 EDFDVBD6EXAMPLE 替换为目标分配 ID。使用与目标分配在同一AWS账户中的凭据运行此命令。使用此命令时,请注意以下限制:

    • 您必须拥有目标分配的 cloudfront:AssociateAliascloudfront:UpdateDistribution 权限。

    • 如果源分配和目标分配在同一AWS账户中,您必须对源分配具有 cloudfront:UpdateDistribution 权限。

    • 如果源分配和目标分配在不同AWS账户中,则必须禁用源分配。

    • 必须按照设置目标分配中所述设置目标分配。

    aws cloudfront associate-alias --alias www.example.com --target-distribution-id EDFDVBD6EXAMPLE

    此命令通过从源分配中删除备用域名并将其添加到目标分配,来更新这两个分配。

  2. 目标分配完全部署后,更新您的 DNS 配置以将备用域名的 DNS 记录指向目标分配的分配域名。

使用通配符移动备用域名

如果源分配与目标分配在不同AWS账户中,并且源分配已启用,您可以使用通配符移动备用域名。

注意

您不能使用通配符移动顶级域(例如 example.com)。如果源分配和目标分配在不同AWS账户中,要移动顶点域,请联系 AWS Support。有关更多信息,请参阅联系 AWS Support 以移动备用域名

使用通配符移动备用域名

注意

此过程涉及对分配的多次更新。在继续下一步之前,请等待每个分配完全部署完最新的更改。

  1. 更新目标分配以添加一个通配符备用域名,该域名涵盖您要移动的备用域名。例如,如果您要移动的备用域名是 www.example.com,请将备用域名 *.example.com 添加到目标分配中。为此,目标分配上的 SSL/TLS 证书必须包含通配符域名。有关更多信息,请参阅更新分配

  2. 更新备用域名的 DNS 设置以指向目标分配的域名。例如,如果您要移动的备用域名是 www.example.com,请更新 www.example.com 的 DNS 记录以将流量路由到目标分配的域名(例如 d111111abcdef8.cloudfront.net)。

    注意

    即使在您更新 DNS 设置之后,备用域名仍由源分配提供服务,因为这是当前配置备用域名的位置。

  3. 更新源分配以删除备用域名。有关更多信息,请参阅更新分配

  4. 更新目标分配以添加备用域名。有关更多信息,请参阅更新分配

  5. 使用 dig(或类似的 DNS 查询工具)验证备用域名的 DNS 记录是否解析为目标分配的域名。

  6. (可选)更新目标分配以删除通配符备用域名。

联系 AWS Support 以移动备用域名

如果您要移动的备用域名是顶级域,源分配和目标分配在不同AWS账户中,并且您无权访问源分配的AWS账户或无法禁用源分配,您可以联系 AWS Support 来移动备用域名。

联系 AWS Support 以移动备用域名

  1. 设置目标分配,包括指向目标分配的 DNS TXT 记录。有关更多信息,请参阅设置目标分配

  2. 联系 AWS Support 以请求他们验证您是否拥有该域,然后为您将该域移动到新的 CloudFront 分配。

删除备用域名

如果您要停止将域或子域的流量路由到 CloudFront 分配,请按本节中的步骤更新 DNS 配置和 CloudFront 分配。

请务必从该分配中删除备用域名并更新您的 DNS 配置。当您希望将域名与其他 CloudFront 分配关联时,这有助于防止以后出现问题。如果某个备用域名已经与一个分配关联,则不能将该域名设置为与其他分配关联。

注意

如果您要从此分配中删除备用域名以便能将它添加到其他分配,请按照将备用域名移动到其他分配中的步骤操作。如果您改为执行此处的步骤(用于删除域),然后将域添加到另一个分配,则在一段时间内,域不会链接到新分配,因为 CloudFront 会传播到对边缘站点的更新。

从分配中删除备用域名

  1. 要开始操作,请将您的域的 Internet 流量路由到不是您的 CloudFront 分配的其他资源(如 Elastic Load Balancing 负载均衡器)。或者,您也可以删除将流量路由到 CloudFront 的 DNS 记录。

    根据您的域的 DNS 服务执行以下操作之一:

    • 如果您使用的是 Route 53,请更新或删除别名记录或 CNAME 记录。有关更多信息,请参阅编辑记录删除记录

    • 如果您使用的是其他 DNS 服务提供商,请使用 DNS 服务提供商提供的方法来更新或删除将流量引向 CloudFront 的 CNAME 记录。有关更多信息,请参阅 DNS 服务提供商提供的文档。

  2. 在更新您的域的 DNS 记录后,请等到更改已传播且 DNS 解析程序正在将流量路由到新资源。您可以通过创建一些在 URL 中使用您的域的测试链接来检查确认该操作完成的时间。

  3. 登录到AWS Management Console并打开 CloudFront 控制台 (https://console.aws.amazon.com/cloudfront/v3/home),然后更新您的 CloudFront 分配并通过执行以下操作来删除域名:

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

    2. General 选项卡上,选择 Edit

    3. Alternate Domain Names (CNAMEs) (备用域名 (CNAME)) 中,删除您不想再用于分配的备用域名 (或域名)。

    4. 选择是,编辑

在备用域名中使用通配符

在添加备用域名时,可以在域名开头使用 * 通配符,而不是逐个添加子域。例如,如果备用域名为 *.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

对于包含通配符的备用域名,请遵循以下要求:

  • 备用域名必须以星号和点 (*.) 开头。

  • 不能使用通配符替换子域名的一部分,例如:*domain.example.com。

  • 您不能替换某个域名中间的子域名,例如:subdomain.*.example.com。

  • 所有备用域名,包括使用通配符的备用域名,必须涵盖在证书的使用者备用名称 (SAN) 中。

通配符备用域名(例如 *.example.com)可以包含其他正在使用的备用域名,例如 example.com。

使用备用域名的要求

在向 CloudFront 分配添加备用域名(例如 www.example.com)时,需满足以下要求:

备用域名必须小写

所有备用域名 (CNAME) 都必须小写。

备用域名必须为有效的 SSL/TLS 证书所涵盖

要将备用域名 (CNAME) 添加至 CloudFront 分配,必须给您的分配附加一个可信且有效的 SSL/TLS 证书,其中涵盖了备用域名。这样可以确保仅有权访问您的域证书的人员能够将 CloudFront 关联到与您的域相关的 CNAME。

受信任证书是由 AWS Certificate Manager (ACM) 或其他有效证书颁发机构 (CA) 颁发的证书;您不能使用自签名证书。CloudFront 支持与 Mozilla 相同的证书颁发机构。有关当前列表,请参阅 Mozilla 包含的 CA 证书列表

为了使用附加的证书来验证备用域名(包括含通配符的域名),CloudFront 会检查证书上的使用者备用名称 (SAN)。要添加的备用域名必须为 SAN 所涵盖。

注意

一次只能将一个证书附加到 CloudFront 分配。

您可以通过执行以下操作之一来证明您有权向分配中添加特定的备用域名:

  • 附加包含备用域名的证书,例如 product-name.example.com。

  • 附加一个证书,其中包括一个 * 通配符在域名的开头,以用一个证书涵盖多个子域。当指定通配符时,可以在 CloudFront 中添加多个子域作为备用域名。

以下示例说明了如何在证书的域名中使用通配符来授权您在 CloudFront 中添加特定的备用域名。

  • 您要添加 marketing.example.com 作为备用域名。您在证书中列示以下域名:*.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 作为备用域名。要执行此操作,您可以在证书上列出 *.product.example.com,也可以在证书上列出 marketing.product.example.com 本身。

更改 DNS 配置所需的权限

在添加备用域名时,您必须创建 CNAME 记录,以将备用域名的 DNS 查询路由到您的 CloudFront 分配。要执行此操作,您必须具有创建 CNAME 记录的权限,并为您使用的备用域名指定 DNS 服务提供商。通常,这意味着您拥有这些域,但您可能在为域所有者开发应用程序。

备用域名和 HTTPS

如果您希望查看器使用 HTTPS 和备用域名,还必须进行其他配置。有关更多信息,请参阅 使用备用域名和 HTTPS

备用域名的使用限制

请注意备用域名的以下使用限制:

备用域名的最大数量

有关您可以添加到分配的当前最大备用域名数,或要请求提高配额(以前称为限制),请参阅分配的一般配额

重复和重合备用域名

如果相同的备用域名已经在另一个 CloudFront 分配中存在,则您不能将其添加到 CloudFront 分配中,即使您的 AWS 账户拥有其他分配也不行。

不过,您可以添加通配符备用域名(例如 *.example.com),该域名包含(重叠)非通配符备用域名,例如 www.example.com。如果在两个分配中有重合的备用域名,则 CloudFront 将发送请求到具有更具体名称匹配的那个分配,而不管 DNS 记录指向哪个分配。例如,marketing.domain.com 比 *.domain.com 更具体。

域前置

CloudFront 中包含防止域前置跨不同 AWS 账户发生的措施。在域前置中,非标准客户端会建立与一个 AWS 账户中的域名的 TLS/SSL 连接,但随后又发出针对另一个 AWS 账户中的不相关名称的 HTTPS 请求。例如,TLS 连接可能连接到 www.example.com,然后发出对 www.example.org 的 HTTP 请求。

为防范跨不同 AWS 账户的域前置攻击,CloudFront 确保拥有为特定连接提供证书的 AWS 账户始终与拥有在同一连接上被处理的请求的 AWS 账户匹配。

如果两个 AWS 账号不匹配,CloudFront 将做出“HTTP 421 错误定向请求”响应,让客户端有机会使用正确的域进行连接。

在域的顶部节点(顶级域名)添加备用域名

当您将备用域名添加到分配时,通常在 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 记录相比,该记录集具备 2 个优势。您可以在顶部节点 (example.com) 为域名创建别名资源记录集。此外,当您使用别名资源记录集时,就不用付款进行 Route 53 查询了。

注意

如果您启用 IPv6,您必须创建两个别名资源记录集:一个用于路由 IPv4 流量 (A 记录),一个用于路由 IPv6 流量 (AAAA 记录)。有关更多信息,请参阅 启用 IPv6 主题中的 您创建或更新分配时指定的值

有关更多信息,请参阅《Amazon Route 53 开发人员指南》中的使用域名将流量路由到 Amazon CloudFront Web 分配