

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

# 自定义域问题排查
<a name="troubleshooting-custom-domains"></a>

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

如果您在这里找不到问题的解决方案，请联系 支持。有关更多信息，请参阅 *AWS 支持 用户指南*中的[创建支持案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)。

**Topics**
+ [我需要验证我的 CNAME 别名记录是否已解析](#how-do-i-verify-that-my-cname-resolves)
+ [我在第三方托管的域卡在了等待验证状态](#my-domain-hosted-with-a-third-party-is-stuck-in-the-pending-verification-state)
+ [我在 Amazon Route 53 托管的域卡在了等待验证状态](#my-domain-hosted-with-amazon-route-53-is-stuck-in-the-pending-verification-state)
+ [包含多级子域的应用程序停滞在“待验证”状态](#multilevel-domain-is-stuck-in-the-pending-verification-state)
+ [我的 DNS 提供商不支持使用完全限定域名的 A 记录](#FQDN-A-recored-unsupported)
+ [我收到一个 CNAMEAlreadyExistsException 错误](#i-get-a-cnamealreadyexistsexception-error)
+ [我收到需要额外验证错误](#i-get-an-additionalverificationrequired-error)
+ [我在网址上收到 404 错误 CloudFront](#i-get-a-404-cloudfront-url)
+ [我在访问我的域时收到 SSL 证书或 HTTPS 错误](#ssl-HTTPS-errors-on-domain)
+ [域重定向中不支持路径组件](#domain-redirects-path-components)
+ [跨账户域名关联时出现了 400 错误](#cross-account-domain-association-400-error)

## 我需要验证我的 CNAME 别名记录是否已解析
<a name="how-do-i-verify-that-my-cname-resolves"></a>

1. 通过第三方域提供商更新 DNS 记录后，您可以使用诸如 [dig](https://en.wikipedia.org/wiki/Dig_(command)) 之类的工具或免费网站（例如 [https://www.whatsmydns.net/](https://www.whatsmydns.net/)）来验证您的别名记录是否正确解析。以下屏幕截图演示了如何使用 whatsmydns.net 来查看该域 **www.example.com** 的别名记录。  
![\[whatsmydns.net 应用程序，您可以在其中输入要查看的网站名称。\]](http://docs.aws.amazon.com/zh_cn/amplify/latest/userguide/images/amplify-troubleshooting-whatsmydns-1Update.png)

1. 选择**搜索**，**whatsmydns.net** 会显示您的别名记录结果。以下屏幕截图例举了验证别名记录是否正确解析为 cloudfront.net 网址的结果列表。  
![\[whatsmydns.net 应用程序显示了解析 CNAME 别名记录的结果。\]](http://docs.aws.amazon.com/zh_cn/amplify/latest/userguide/images/amplify-troubleshooting-whatsmydns-2Update.png)

## 我在第三方托管的域卡在了等待验证状态
<a name="my-domain-hosted-with-a-third-party-is-stuck-in-the-pending-verification-state"></a>

1. 如果您的自定义域陷入**待验证**状态，请验证您的 CNAME 记录是否正在解析。有关执行此任务的说明，请参阅之前的问题排查主题[如何验证我的 CNAME 解析](#how-do-i-verify-that-my-cname-resolves)。

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

1. 如果已确认 CNAME 记录存在，那么您的 DNS 提供商可能存在问题。您可以联系 DNS 提供商，来诊断 DNS 验证 CNAME 未解析的原因，也可以将 DNS 迁移到 Route53。有关更多信息，请参阅[将 Amazon Route 53 作为现有域的 DNS 服务](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/MigratingDNS.html)。

## 我在 Amazon Route 53 托管的域卡在了等待验证状态
<a name="my-domain-hosted-with-amazon-route-53-is-stuck-in-the-pending-verification-state"></a>

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

1. 登录 [Amazon Route 53 控制台](https://console.aws.amazon.com/route53/home)

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

1. 记录**托管区域详细信息**部分中的名称服务器值。您需要这些值来完成下一步。以下 Route 53 控制台屏幕截图在右下角处显示了名称服务器值的位置。  
![\[Route 53 控制台中“托管区详细信息”部分，显示了名称服务器值。\]](http://docs.aws.amazon.com/zh_cn/amplify/latest/userguide/images/1555952748759-111.png)

1. 在导航窗格中，选择 **Registered domains**。验证**已注册域**部分显示的名称服务器是否与您在上一步中在**托管区域详细信息**部分中记录的名称服务器值一致。如果不一致，请编辑名称服务器值，使其与**托管区域**中的值一致。以下 Route 53 控制台屏幕截图在右侧显示了名称服务器值的位置。  
![\[Route 53 控制台中“已注册域”部分，显示了名称服务器值。\]](http://docs.aws.amazon.com/zh_cn/amplify/latest/userguide/images/1555952748759-607.png)

1. 如果这仍无法解决问题，请联系 支持。有关更多信息，请参阅 *AWS 支持 用户指南*中的[创建支持案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)。

## 包含多级子域的应用程序停滞在“待验证”状态
<a name="multilevel-domain-is-stuck-in-the-pending-verification-state"></a>

如果包含多级子域的应用程序在连接到第三方 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 记录
<a name="FQDN-A-recored-unsupported"></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 错误
<a name="i-get-a-cnamealreadyexistsexception-error"></a>

如果您遇到**CNAMEAlreadyExistsException**错误，则表示您尝试连接的其中一个主机名（子域名或顶点域）已部署到另一个 Ama CloudFront zon 分发中。导致错误的根源取决于当前使用的托管服务和 DNS 提供商。

CNAME别名（例如`example.com`或）一次`sub.example.com`只能与单个 CloudFront分配相关联。**CNAMEAlreadyExistsException**表示您的域名已与其他 CloudFront 分配相关联，无论是在同一个账户中 AWS 账户，还是可能在不同的账户中。在 Amplify Hosting 创建的新 CloudFront 发行版生效之前，必须先解除该域名与之前的发行版的关联。如果您或您的组织拥有多个帐户，则可能需要检查多个 AWS 账户帐户。

执行以下步骤来诊断**CNAMEAlreadyExistsException**错误的原因。

1. 登录 [Amazon CloudFront 控制台](https://console.aws.amazon.com/cloudfront/home?#)并确认您没有将此域部署到其他分配。一次只能将CNAME一条记录附加到一个 CloudFront 发行版中。

1. 如果您之前已将该域部署到 CloudFront 分配中，则必须将其删除。

   1. 在左侧导航菜单中，选择**分发**。

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

   1. 选择**通用**选项卡。在**设置**部分中，选择**编辑**。

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

1. 确认当前 AWS 账户 或其他 CloudFront 版本中不存在使用此域的其他发行版 AWS 账户。如果不会导致任何当前正在运行的服务出现中断，则可尝试删除并重新创建托管区。

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

1. 如果该域曾成功连接到其他应用程序，然后在过去一小时内被删除，请至少在一小时后重试。如果您在 6 小时后仍看到此异常，请与联系 支持。有关更多信息，请参阅 *AWS 支持 用户指南*中的[创建支持案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)。

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

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

## 我收到需要额外验证错误
<a name="i-get-an-additionalverificationrequired-error"></a>

如果您收到 “**需要额外验证**” 错误，这意味着 AWS Certificate Manager (ACM) 需要其他信息来处理此证书申请。这可以用作防止欺诈措施，例如域名位于 [Alexa 1000 强网站](https://aws.amazon.com/marketplace/pp/Amazon-Web-Services-Alexa-Top-Sites/B07QK2XWNV)中时。要提供此必要信息，请使用[支持中心](https://console.aws.amazon.com/support/home)联系 支持。如果您没有支持计划，请在 [ACM 开发论坛](https://forums.aws.amazon.com/forum.jspa?forumID=206)中发布新话题。

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

## 我在网址上收到 404 错误 CloudFront
<a name="i-get-a-404-cloudfront-url"></a>

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

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

## 我在访问我的域时收到 SSL 证书或 HTTPS 错误
<a name="ssl-HTTPS-errors-on-domain"></a>

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

**添加 CAA 记录以信任 Amazon 证书颁发机构**

1. 通过您的域提供商配置一条 CAA 记录，以信任 Amazon 证书颁发机构的至少一个域。有关配置 CAA 记录的更多信息，请参阅 *AWS Certificate Manager 用户*指南中的[证书颁发机构授权 (CAA) 问题](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-caa.html)。

1. 使用以下方法之一更新 SSL 证书：
   + 使用 Amplify 控制台手动更新。
**注意**  
此方法会导致您的自定义域宕机。

     1. 登录 AWS 管理控制台 并打开 [Amplify](https://console.aws.amazon.com/amplify/) 控制台。

     1. 选择要添加 CAA 记录的应用程序。

     1. 在导航窗格中，依次选择**应用程序设置**、**域管理**。

     1. 在**域管理**页面上，删除自定义域。

     1. 再次将您的应用程序连接到自定义域。此过程会颁发新的 SSL 证书，其中间证书现在可以由 ACM 管理。

        要将应用程序重新连接到您的自定义域，请使用与您正在使用的域提供商相对应的以下步骤之一。
        + [添加由 Amazon Route 53 管理的自定义域](to-add-a-custom-domain-managed-by-amazon-route-53.md).
        + [添加由第三方 DNS 提供商管理的自定义域](to-add-a-custom-domain-managed-by-a-third-party-dns-provider.md).
        + [更新由管理的域的 DNS 记录 GoDaddy](to-add-a-custom-domain-managed-by-godaddy.md).
   + 请联系 支持 以补发您的 SSL 证书。

## 域重定向中不支持路径组件
<a name="domain-redirects-path-components"></a>

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

## 跨账户域名关联时出现了 400 错误
<a name="cross-account-domain-association-400-error"></a>

当使用已经或以前与同一地区其他 AWS 账户中的不同 Amplify 应用程序关联的域名发起对 Amplify 应用程序的 DomainAssociation 请求时，这被视为跨账户域关联。如果您收到此错误，则表示您正在尝试跨账户域名关联，需要手动验证。如果您想继续进行跨账户域名关联，请联系 AWS 支持寻求帮助。