通过添加备用域名 (CNAME) 将自定义 URL 用于文件 - Amazon CloudFront

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

通过添加备用域名 (CNAME) 将自定义 URL 用于文件

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

当您创建分配时,CloudFront 返回分配的域名,例如:

d111111abcdef8.cloudfront.net

在将 CloudFront 域名用于您的文件时,名为 /images/image.jpg 的文件的 URL 是:

https://d111111abcdef8.cloudfront.net/images/image.jpg

如果要使用自己的域名,例如 www.example.com,而不是 cloudfront.net 域名,您可以将备用域名添加到分发中,例如 www.example.com。然后,您可以使用以下URL查看 /images/image.jpg:

https://www.example.com/images/image.jpg

添加备用域名

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

注意

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

开始前的准备工作 在更新分发以添加备用域名之前,请确保执行以下操作:

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

  • 将来自授权证书颁发机构 (CA) 的证书添加到 CloudFront,该证书涵盖您计划用于分配的域名,以验证您是否获得授权使用该域。有关更多信息,请参阅 使用备用域名的要求。)

添加备用域名

  1. 登录 AWS 管理控制台,通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/

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

  3. General 选项卡上,选择 Edit

  4. 更新以下值:

    备用域名 (CNAME)

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

    SSL 证书(仅限 Web 分配)

    选择以下设置:

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

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

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

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

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

    支持的客户端 (仅限 Web 分配)

    选择一个选项:

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

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

    有关更多信息,请参阅 选择 CloudFront 提供 HTTPS 请求的方式。)

  5. 选择是,编辑

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

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

    注意

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

    Route 53

    创建别名资源记录集。有了别名资源记录集,您无需付费即可进行 Route 53 查询。此外,您可以为根域名 (example.com) 创建别名资源记录集,而 DNS 不允许 CNAME。有关详细信息,请参阅 使用域名将流量路由到AmazonCloudFrontWeb分发Amazon Route 53 开发人员指南.

    其他 DNS 服务提供商

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

    重要

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

    此外,确认您的 CNAME 资源记录集指向分配的域名而不是您的源服务器之一。

  8. 使用 dig 或类似的 DNS 工具,确认您在第 7 步创建的资源记录集指向分配的域名。

    以下示例显示了 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 记录。在这种情况下,请回到步骤 4,纠正 CNAME 记录以指向分配的域名。

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

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

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

如果您要将备用域名从一个 CloudFront 分配移动到另一个分配,您必须执行的步骤取决于您要移动的域名:

将子域名移至另一个分配

执行以下步骤来移动子域名,例如 www.example.com

将子域名移动到新分配

  1. 登录 AWS 管理控制台,通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/

  2. 如果您没有要将域名移动到的新分配,请创建一个。有关更多信息,请参阅 创建分配。)

  3. 为该分配添加一个包含备用域名集或 CNAME 记录的通配符的备用域名。例如,如果要移动到新分布的子域名称是 www.example.com,添加备用域名 *.example.com。有关详细信息,请参阅 在添加到 CloudFront 的备用域名中使用通配符.

    注意

    您无法向顶级域名 (如 *.com) 添加通配符,因此,如果您要将 example.com 之类的域名移动到新分配,请参阅 将顶级域名移至另一个分配

  4. 将子域的 DNS 配置更新为指向新分配。例如,您应更新子域 www.example.com 的 DNS 服务以将流量路由到分配的 CloudFront 域名 d111111abcdef8.cloudfront.net

    要更新配置,请执行以下操作之一:

    • 如果您使用的是 Route 53,请更新别名记录或 CNAME 记录,具体取决于您最初设置备用域名的方式。有关详细信息,请参阅 编辑记录AmazonRoute53开发者指南.

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

      注意

      由于这是当前配置备用域的位置,此时子域仍将由原始分配提供服务。

  5. 使用 dig 或类似的 DNS 工具,确认您在步骤 4 创建的资源记录集指向分配的域名。

    以下示例显示了 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 记录。在这种情况下,请回到步骤 4,纠正 CNAME 记录以指向分配的域名。

    注意

    在使用 Route 53 别名记录时,不能使用 dig 来确认资源记录指向新分配。这种情况下,可以将资源记录的类型从别名更改为别名记录,或者等到记录生存时间 (TTL) 值到期。

  6. 从现有分配中删除 CNAME,然后添加到先前添加通配符备用名称的新 CloudFront 分配中。

    注意

    传播这些更改时,备用域名会由原始分配或新分配随机提供服务。这种行为可能会持续几分钟,直至两个发行版达到已部署状态。

  7. 通过访问一些使用您的域名而不是分配的 CloudFront 域名的 URL 来测试备用域名。

  8. (可选)现在可以从新的分配中删除通配符备用名称。

  9. 如果您不再使用原始配置,请删除它。有关更多信息,请参阅 删除分配。)

将顶级域名移至另一个分配

对于顶级域名(例如 example.com),您必须联系 AWS Support 以将域名移动到另一个 CloudFront 分配。必须执行额外步骤,因为自行移动域 (如上一过程中所述) 需要设置对域名的一部分使用通配符的域路由。对于顶级域,在本步骤中,您必须将路由设置为 *.com,而这是不允许的。

在开始之前,如果您没有要将域名移动到的新分配,请创建一个。有关更多信息,请参阅 创建分配。)

将域名 (如 example.com) 移动到新分配需要执行两个步骤:

步骤 1. 提供证据 AWS Support 在DNS服务提供商上为您的域创建TXT记录,从而拥有域名。这有助于防止其他人对您的分配配置进行更改。

步骤 2. 要求 AWS Support 将您的域移动到新的 CloudFront 分布。

下面是要执行的具体步骤。

步骤 1. 为您的域创建TXT记录

  1. 日志记录您的 DNS 服务提供商网站。

    如果您的服务提供商是 Route 53,请登录到 Route 53 控制台

  2. 为您的域创建一条类似于下面的 TXT 记录:

    domain name TXT CloudFrontdistribution domain name

    例如:example.com TXT d111111abcdef8.cloudfront.net

    • 如果您的 DNS 服务提供商是 Route 53,请转到步骤 3 以了解详细步骤。

    • 如果您的域由其他 DNS 服务提供商托管,请参阅 DNS 服务提供商处的文档。您可能需要请求您的服务提供商为您创建 TXT 记录。

      提示

      如果您的服务提供商不允许为与 CNAME 记录具有相同的信息的域指定 TXT 记录,则可以考虑创建一个使用您的域名(前面添加了下划线 (_))的 TXT 记录。有关示例,请参阅以下知识库文章: 解决CNAME已存在错误.

  3. 如果您的 DNS 服务提供程序是 Route 53,请使用以下步骤创建 TXT 记录来证明域所有权:

    1. 托管区域页面上,双击您要在其中编辑记录的托管区域对应的行。

    2. 选择 Create Record Set

    3. 输入以下值:

      • 名称 您要移至新 CloudFront 分布

      • 类型。TXT

      • 别名

      • TTL:60 秒

      • 的 CloudFront 您要添加此域名的分发,例如d123.cloudfront.net

      • 路由策略: 简便

    4. 选择创建

步骤 2. 要求 AWS 支持将您的域移动到新的 CloudFront 分布

  • 登录到 AWS 并联系 AWS Support 以请求他们验证您是否拥有该域,然后将该域移动到新 CloudFront 分配。

    注意

    AWS Support 无法验证您的域所有权,除非他们可以查看您为自己的域创建的 TXT 记录。请注意,您在 DNS 提供商处创建的记录可能需要一些时间 (最多几天) 才能传播到整个 DNS 系统。

删除备用域名

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

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

注意

如果您要从该分配中删除备用域名以便能将它添加到其他分配,请按照 将备用域名移动到其他的 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 管理控制台并打开 CloudFront 控制台 (https://console.aws.amazon.com/cloudfront/),然后更新您的 CloudFront 分配以通过执行以下操作来删除域名:

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

    2. General 选项卡上,选择 Edit

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

    4. 选择是,编辑

在添加到 CloudFront 的备用域名中使用通配符

在添加备用域名时,可以在域名开头使用 * 通配符,而不是逐个添加子域。例如,备用域名为 *.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 分配中,或者位于使用同一 AWS 账户创建的分配中。

使用备用域名的要求

在向 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.commarketing.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。)

备用域名的使用限制

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

备用域名的最大数量

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

重复和重合备用域名

如果备用域名在一个 CloudFront 分配中已存在,则无法将其添加到另一个 CloudFront 分配中,即使您的 AWS 账户拥有其他分配。

但是,您可以添加通配符备用域名,例如 *.example.com,包括(与)非通配符备用域名,例如 www.example.com。重叠的备用域名可以位于相同的分布中,也可以位于单独的分布中,只要使用相同的分布创建两个分布 AWS 帐户。

如果在两个分配中有重合的备用域名,则 CloudFront 将发送请求到具有更具体名称匹配的那个分配,而不管 DNS 记录指向哪个分配。例如,marketing.domain.com*.domain.com 更具体。

已指向分配的备用域名

如果您的 DNS 记录指向的分配并不是您正在创建或修改的分配,则您无法向您的分配添加备用域名。在这种情况下,您必须在您的 DNS 提供商处更新您的 DNS,然后才能为您的 CloudFront 分配添加域名。

要更正此问题,请登录到您的 DNS 提供商并删除现有的 DNS 记录,或联系您的 DNS 提供商将其删除。然后,按照为您的分配添加或更改备用域名的步骤,为您的分配创建正确的 DNS 记录。有关更多信息,请参阅添加备用域名 将备用域名移动到其他的 CloudFront 分配

域前置

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

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

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

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

当您将备用域名添加到分配时,您通常在 DNS 配置中创建 CNAME 记录,以将域名的 DNS 查询路由到 CloudFront 分配。不过,您无法为 DNS 命名空间的顶端节点(也称为顶级域名)创建 CNAME 记录;DNS 协议不允许您这样做。例如,如果您注册DNS名称 example.com,区域顶点为 example.com。无法为创建CNAME记录 example.com但您可以为创建CNAME记录 www.example.com, newproduct.example.com等。

如果您使用 Route 53 作为您的 DNS 服务,则可以创建别名资源记录集,与 CNAME 记录相比,该记录集具备 2 个优势。您可以在顶部节点 (example.com) 为域名创建别名资源记录集。此外,当您使用别名资源记录集时,便无需付费进行 Route 53 查询了。

注意

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

有关详细信息,请参阅 使用域名将流量路由到AmazonCloudFrontWeb分发Amazon Route 53 开发人员指南.