AWS 无法为云端 CNAME 指定没有子域的路由 53 记录

AWS can't specify route 53 record without subdomain for cloudfront CNAME

我决定在 AWS 上托管我自己的作品集,所以我完成了以下步骤。

  1. 将其托管在 s3 上(一切正常)
  2. 在 route53 购买域名
  3. 创建了一个类型记录以将我的域指向 s3(一切正常)
  4. 在 ACM 中为域生成了 public 证书:*.mywebsite.com、mywebsite.com
  5. 已创建 CloudFront 分配并具有以下设置
    • 原始域名:链接到 s3(一切正常)
    • CNAMES: www.mywebsite.com, *.mywebsite.com, mywebsite.com
    • WIEVER 协议策略:将 HTTP 重定向到 HTTPS
    • 使用在步骤 4 中创建的自定义证书
  6. 创建了另一个 CNAME 记录,将 *.mywebsite.com 指向云端 url

当我访问带有子域的网站时,我对它的工作方式非常满意:

所有这些都很好地通过 https 协议将其重定向到我的网站 但问题是当我尝试访问没有像 mywebsite.com 这样的子域的网站时,它通过 http 协议,对于 https,我最终得到 ERR_CONNECTION_TIMED_OUT,所以我尝试为名称 [=10] 添加另一个 CNAME 记录=] 并出现以下错误:

发生错误 错误的请求。 (InvalidChangeBatch 400:DNS 名称为 mywebsite.com 的 CNAME 类型的 RRSet 不允许出现在区域 mywebsite.com 的顶点。)

有解决该问题的想法吗?

我不太喜欢网络和配置这些类型的东西,所以如果我做错了什么,我将不胜感激。

@编辑: 尝试将名称为 mywebsite.com 的 A 类型记录添加到 www.mywebsite.com 并收到:

(InvalidChangeBatch 400: Tried to create resource record set [name='mywebsite.com.', type='A'] but it already exists), there is already one linking to S3

A​​WS 的 doc 描述了这种情况。即-

You can't create a CNAME record at the top node of a DNS namespace, also called the zone apex (such as example.com). If you're creating a record for the apex domain to point to AWS resources, you can use an alias record instead of CNAME.

Alias Records

因此,您可以使用类型为 A 的别名记录而不是 CNAME 来解决您看到的错误。

您在步骤 3) 中遇到了问题。顶点域指向 S3 存储桶,它应该指向 CloudFront 分配。

它应该是这样的:

Route53:ACM 证书 CNAME,A 记录 => 云端 CloudFront:ACM 证书 + mywebsite.com 的别名,来源:S3 存储桶 S3 存储桶:托管文件

请注意,只有 A 记录(和 AAAA,如果您需要 IPv6)指向 CloudFront,并且 ACM 仅使用 1 条 CNAME 记录来验证域。