自定义域问题排查 - AWS Amplify 托管

自定义域问题排查

如果您在将自定义域连接到 Amplify 应用程序时遇到问题,请查阅本节中的主题以获取帮助。

如果您在这里找不到问题的解决方案,请联系 支持。有关更多信息,请参阅 AWS 支持 用户指南中的创建支持案例

我需要验证我的 CNAME 别名记录是否已解析

  1. 通过第三方域提供商更新 DNS 记录后,您可以使用诸如 dig 之类的工具或免费网站(例如 https://www.whatsmydns.net/)来验证您的别名记录是否正确解析。以下屏幕截图演示了如何使用 whatsmydns.net 来查看该域 www.example.com 的别名记录。

    whatsmydns.net 应用程序,您可以在其中输入要查看的网站名称。
  2. 选择搜索whatsmydns.net 会显示您的别名记录结果。以下屏幕截图例举了验证别名记录是否正确解析为 cloudfront.net 网址的结果列表。

    whatsmydns.net 应用程序显示了解析 CNAME 别名记录的结果。

我在第三方托管的域卡在了等待验证状态

  1. 如果您的自定义域陷入待验证状态,请验证您的 CNAME 记录是否正在解析。有关执行此任务的说明,请参阅之前的问题排查主题如何验证我的 CNAME 解析

  2. 如果您的 CNAME 记录无法解析,请向您的域提供商确认 CNAME 条目存在于您的 DNS 设置中。

    重要

    创建您的自定义域后,请务必立即更新 CNAME 记录。在 Amplify 控制台中创建应用程序后,每隔数分钟就会检查一次 CNAME 记录,以确定它是否已解析。如果一小时后仍未解决,则每隔数小时进行一次检查,这可能会导致您的域名在准备好使用方面会有所延迟。如果您在创建应用程序几小时后添加或更新了 CNAME 记录,则这很可能是您的应用程序陷入待验证状态的原因。

  3. 如果已确认 CNAME 记录存在,那么您的 DNS 提供商可能存在问题。您可以联系 DNS 提供商,来诊断 DNS 验证 CNAME 未解析的原因,也可以将 DNS 迁移到 Route53。有关更多信息,请参阅将 Amazon Route 53 作为现有域的 DNS 服务

我在 Amazon Route 53 托管的域卡在了等待验证状态

如果您将域转移到 Amazon Route 53,则您的域可能与创建应用程序时由 Amplify 发布的名称服务器不同。执行以下步骤诊断出错的原因。

  1. 登录 Amazon Route 53 控制台

  2. 在导航窗格中,选择托管区域,然后选择要连接的域的名称。

  3. 记录托管区域详细信息部分中的名称服务器值。您需要这些值来完成下一步。以下 Route 53 控制台屏幕截图在右下角处显示了名称服务器值的位置。

    Route 53 控制台中“托管区详细信息”部分,显示了名称服务器值。
  4. 在导航窗格中,选择 Registered domains。验证已注册域部分显示的名称服务器是否与您在上一步中在托管区域详细信息部分中记录的名称服务器值一致。如果不一致,请编辑名称服务器值,使其与托管区域中的值一致。以下 Route 53 控制台屏幕截图在右侧显示了名称服务器值的位置。

    Route 53 控制台中“已注册域”部分,显示了名称服务器值。
  5. 如果这仍无法解决问题,请联系 支持。有关更多信息,请参阅 AWS 支持 用户指南中的创建支持案例

包含多级子域的应用程序停滞在“待验证”状态

如果包含多级子域的应用程序在连接到第三方 DNS 提供商时停滞在待验证状态,则说明您的 DNS 记录格式可能存在问题。某些 DNS 提供商会自动将二级域(SLD)和顶级域(TLD)的域后缀添加到您的记录中。如果您也以包含 SLD 和 TLD 的格式指定域,则可能会导致域验证问题。

在连接域时,请先尝试使用 Amplify 提供的完整格式指定域名,例如 _hash.docs.backend.example.com。如果 SSL 配置停滞在待验证状态,请尝试移除记录中的 TLD 和 SLD。例如,假设完整格式为 _hash.docs.backend.example.com,则指定 _hash.docs.backend。请等待 15 到 30 分钟,以便完成记录传播。然后使用诸如 MX Toolbox 之类的工具来检查能否正常完成验证过程。

我的 DNS 提供商不支持使用完全限定域名的 A 记录

某些 DNS 提供商不支持使用完全限定域名(FQDN)的 A 记录(例如example.cloudfront.net)。例如,Cloudflare A records 只能写入 IPv4 地址,不支持 FQDNs。要解决此限制,我们建议在 DNS 配置中使用 CNAME 记录,而不是 A records。

例如,以下 DNS 配置就使用了 A record。

A | @ | ***.cloudfront.net CNAME | www | ***.cloudfront.net

将其更改为以下 DNS 配置,从而仅使用 CNAME 记录。

CNAME | @ | ***.cloudfront.net CNAME | www | ***.cloudfront.net

这种方法有助您正确地将顶级域(@ 记录)指向 CloudFront 等服务,同时避免 Cloudflare 系统中 A records 仅支持 IPv4 的限制。

我收到一个 CNAMEAlreadyExistsException 错误

如果收到 CNameAlreadyExistSexception 错误,表示您尝试连接的主机名称之一(子域或顶级域)已部署到另一个 Amazon CloudFront 分发中。导致错误的根源取决于当前使用的托管服务和 DNS 提供商。

CNAME 别名(例如 example.comsub.example.com)一次只能关联到一个 CloudFront 分配。CNAMEAlreadyExistsException 指示您的域已关联到其他 CloudFront 分配,无论是在同一 AWS 账户中,还是在不同的账户中。必须将该域与之前使用的 CloudFront 分配取消关联,然后 Amplify Hosting 创建的新分配才能正常使用。如果您或您的组织拥有多个账户,则可能需要检查多个 AWS 账户。

执行以下步骤诊断导致 CNAMEAlreadyExistsException 错误的原因。

  1. 登录 Amazon CloudFront 控制台,确认您没有将该域部署到其他分配。一次只能将一个 CNAME 记录附加到 CloudFront 分配。

  2. 如果您之前曾将该域部署到 CloudFront 分发中,则必须将其删除。

    1. 在左侧导航菜单中,选择分发

    2. 选择要编辑的分发的名称。

    3. 选择通用选项卡。在 Settings(设置)部分中,选择 Edit(编辑)。

    4. 备用域名 (ANAME) 中移除此域名。然后选择保存更改

  3. 确认在当前 AWS 账户或其他 AWS 账户中没有其他 CloudFront 分配在使用该域。如果不会导致任何当前正在运行的服务出现中断,则可尝试删除并重新创建托管区。

  4. 查看此域是否与您拥有的其他 Amplify 应用程序相关联。如果是,请确保您没有尝试重用其中一个主机名。如果您正在将 www.example.com 用于其他应用程序,则不能将 www.example.com 用于您当前正在连接的应用程序。您可以使用其他子域,例如 blog.example.com

  5. 如果该域曾成功连接到其他应用程序,然后在过去一小时内被删除,请至少在一小时后重试。如果您在 6 小时后仍看到此异常,请联系 支持。有关更多信息,请参阅 AWS 支持 用户指南中的创建支持案例

  6. 如果您通过 Route 53 管理域,请务必清理指向旧 CloudFront 分配的所有托管区 CNAME 或 ALIAS 记录。

  7. 完成上述步骤后,从 Amplify Hosting 中移除自定义域,然后在 Amplify 控制台中重新启动连接自定义域的工作流。

我收到需要额外验证错误

如果您收到需要额外验证错误,表示 AWS Certificate Manager (ACM) 需要其他信息来处理此证书申请。这可以用作防止欺诈措施,例如域名位于 Alexa 1000 强网站中时。要提供此必要信息,请使用支持中心联系 支持。如果您没有支持计划,请在 ACM 开发论坛中发布新话题。

注意

您无法为 Amazon 拥有的域名 (例如以 amazonaws.com、cloudfront.net 或 elasticbeanstalk.com 结尾的域名) 请求证书。

我在 CloudFront 网址上收到 404 错误

为了提供流量,Amplify Hosting 通过别名记录指向 CloudFront 网址。在将应用程序连接到自定义域的过程中,Amplify 控制台会显示该应用程序的 CloudFront 网址。但是,您不能使用此 CloudFront 网址直接访问您的应用程序。它会返回 404 错误。您的应用程序只能使用 Amplify 应用网址(例如 https://main.d5udybEXAMPLE.amplifyapp.com)或您的自定义域(例如 www.example.com)进行解析。

Amplify 需要将请求路由到正确部署的分支,并使用主机名称来执行此操作。例如,您可以配置指向应用程序主线分支的域 www.example.com,也可以配置指向相同应用程序开发分支的域 dev.example.com。因此,您必须根据应用程序的配置子域来访问您的应用程序,这样 Amplify 才能相应地路由请求。

我在访问我的域时收到 SSL 证书或 HTTPS 错误

如果您使用第三方 DNS 提供商配置了证书颁发机构授权 (CAA) DNS 记录,则 AWS Certificate Manager (ACM) 可能无法更新或补发自定义域 SSL 证书的中间证书。要解决此问题,您需要添加一条 CAA 记录来信任 Amazon 证书颁发机构的至少一个域。以下过程描述了您需要执行的步骤。

添加 CAA 记录以信任 Amazon 证书颁发机构
  1. 通过您的域提供商配置一条 CAA 记录,以信任 Amazon 证书颁发机构的至少一个域。有关配置 CAA 记录的更多信息,请参阅 AWS Certificate Manager 用户指南中的证书颁发机构授权 (CAA) 问题

  2. 使用以下方法之一更新 SSL 证书:

域重定向中不支持路径组件

域重定向仅会匹配主机名部分。不支持在基于域的源规则中使用路径组件(例如 "https://domain.com/path"),这会导致该规则被忽略且不会返回错误。有关更多信息,请参阅 重定向和重写示例参考