通过添加备用域名 (CNAME) 使用自定义 URL - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过添加备用域名 (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. 登录Amazon Web Services Management Console并打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

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

  3. General 选项卡上,选择 Edit

  4. 更新以下值:

    备用域名 (CNAME)

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

    SSL 证书

    选择以下设置:

    • 使用 HTTPS – 选择自定义 SSL 证书,然后从列表中选择证书。该列表包含 Amazon 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 证书中的域名不匹配。

      • 仅支持 Server Name 指示 (SNI) 的客户 CloudFront 端:在不返回对象的情况下断开与查看者的连接。

    支持的客户

    选择一个选项:

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

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

    有关更多信息,请参阅选择如何处理 HT CloudFront TPS 请求

  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 开发者指南中的使用您的域名将流量路由到亚马逊 CloudFront 网络分配

    其他 DNS 服务提供商

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

    重要

    如果您的备用域名已有别名记录,请更新该记录或将其替换为指向要分配的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是 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. 查找源分配。您可以使用 Amazon Command Line Interface (Amazon CLI) 查找与备用域名关联的分配。有关更多信息,请参阅查找源分配

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

设置目标分配

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

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

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

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

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

    _www.example.com TXT d111111abcdef8.cloudfront.net

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

查找源分配

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

查找备用域名的源分配
  1. 使用 Amazon Command Line Interface(Amazon CLI) 中的CloudFront list-conflicting-aliases命令,如以下示例所示。将 www.example.com 替换为备用域名,将 EDFDVBD6EXAMPLE 替换为 您之前设置的目标分配的 ID。使用与目标分配在同一Amazon账户中的凭据运行此命令。使用此命令的前提是,您必须拥有目标分配的 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,以及拥有此分配的Amazon账户 ID。分配和账户 ID 信息是部分隐藏的,这使您可以识别您拥有的分配和账户,并有助于保护您没有所有权的分配和账户的信息。

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

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

移动备用域名

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

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

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

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

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

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

associate-alias用于移动备用域名

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

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

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

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

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

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

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

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

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

使用通配符移动备用域名

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

注意

您不能使用通配符移动顶级域(例如 example.com)。如果源分配和目标分配在不同Amazon账户中,要移动顶点域,请联系 Amazon Web Services Support。有关更多信息,请参阅联系 Amazon Web Services 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. (可选)更新目标分配以删除通配符备用域名。

联系 Amazon Web Services Support 以移动备用域名

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

联系 Amazon Web Services Support 以移动备用域名
  1. 设置目标分配,包括指向目标分配的 DNS TXT 记录。有关更多信息,请参阅设置目标分配

  2. Amazon Web Services Support请与他们@@ 联系,要求他们验证您是否拥有该域名,并将该域名移至新的 CloudFront 分配。

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

删除备用域名

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

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

注意

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

从分配中删除备用域名
  1. 首先,请将您域的互联网流量路由到其他不是您的 CloudFront 分配的资源,例如 Elastic Load Balancing 负载均衡器。或者,您可以删除将流量路由到的 DNS 记录 CloudFront。

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

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

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

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

  3. 登录Amazon Web Services Management Console并打开 CloudFront 控制台https://console.amazonaws.cn/cloudfront/v4/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 您的域名相关的别名记录。

可信证书是由 Amazon Certificate Manager (ACM) 或其他有效证书颁发机构 (CA) 颁发的证书。您可以使用自签名证书来验证现有的 CNAME,但不能使用自签名证书来验证新的 CNAME。 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 分配中已存在同一个备用域名,则即使您的Amazon账户拥有另一个 CloudFront 分配,您也无法将备用域名添加到分配中。

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

域前置

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

为防止域前端跨越不同Amazon账户的情况,请 CloudFront 确保拥有其为特定连接提供的证书的Amazon账户始终与拥有其在同一连接上处理的请求的Amazon账户相匹配。

如果两个Amazon账号不匹配, 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 开发者指南中的使用您的域名将流量路由到亚马逊 CloudFront 网络分配