AWS 无法为云端 CNAME 指定没有子域的路由 53 记录
Posted
技术标签:
【中文标题】AWS 无法为云端 CNAME 指定没有子域的路由 53 记录【英文标题】:AWS can't specify route 53 record without subdomain for cloudfront CNAME 【发布时间】:2021-01-01 16:02:28 【问题描述】:我决定在 AWS 上托管我自己的投资组合,所以我完成了以下步骤。
-
在 s3 上托管(一切正常)
在 route53 中购买的域
创建了一个类型记录,将我的域指向 s3(一切正常)
在 ACM 中为域生成公共证书:*.mywebsite.com、mywebsite.com
已创建 CloudFront 分配并具有以下设置
ORIGIN DOMAIN NAME:链接到 s3(一切正常)
CNAMES:www.mywebsite.com、*.mywebsite.com、mywebsite.com
WIEVER 协议策略:将 HTTP 重定向到 HTTPS
使用了第 4 步中制作的自定义证书
创建了另一个 CNAME 记录,将 *.mywebsite.com 指向云端 url
当我使用以下子域访问网站时,我对事情的运作方式非常满意:
www.mywebsite.com foobarbaz.mywebsite.com http://www.mywebsite.com所有这些都很好,通过 https 协议将其重定向到我的网站
但问题是当我尝试在没有子域的情况下访问我的网站时,mywebsite.com
那是通过 http 协议,而对于 https,我最终得到 ERR_CONNECTION_TIMED_OUT
,所以我尝试为名称 mywebsite.com
添加另一个 CNAME 记录并得到了关注错误:
发生错误 错误的请求。 (InvalidChangeBatch 400:DNS 名称为 mywebsite.com 的 CNAME 类型的 RRSet。在 mywebsite.com 区域的顶点不允许使用。)
任何想法如何解决这个问题?
我并不是很喜欢联网和配置这些类型的东西,所以如果我做错了什么,我将不胜感激。
@编辑:
尝试将名称为mywebsite.com
的类型记录添加到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
【问题讨论】:
CNAME 记录不能用于***域。应该为此使用别名记录。 【参考方案1】:您在第 3 步中遇到问题)。顶点域指向 S3 存储桶,该存储桶应指向 CloudFront 分配。
它应该是这样的:
Route53:ACM 证书 CNAME,A 记录 => 云端 CloudFront:ACM 证书 + mywebsite.com 的别名,来源:S3 存储桶 S3 存储桶:托管文件
请注意,只有 A 记录(和 AAAA,如果您需要 IPv6)指向 CloudFront,并且 ACM 仅使用 1 条 CNAME 记录来验证域。
【讨论】:
【参考方案2】:AWS 的doc 描述了这种情况。即-
您不能在 DNS 命名空间的顶部节点创建 CNAME 记录,也称为区域顶点(例如 example.com)。如果您要为***域创建指向 AWS 资源的记录,则可以使用别名记录而不是 CNAME。
Alias Records
因此,您可以使用 A 类型的别名记录而不是 CNAME 来解决您看到的错误。
【讨论】:
(InvalidChangeBatch 400: 试图创建资源记录集 [name='mywebsite.com.', type='A'] 但它已经存在),已经有一个链接到 S3 我的回复是关于您看到的错误。就您的项目而言,我对您要解决的问题感到困惑。因此,您的源站点指向一个 s3 存储桶,这就是您想要的。您试图为来源创建什么别名记录?您是否试图将其指向 Cloudfront? 您能否为您的站点创建一个子域并将其作为存储桶名称,然后将您的来源和您的用户访问的子域转到云端?然后让来自云端的流量路由到您的 s3 子域?然后,您可以将所需的 Alias 原始记录指向云端以上是关于AWS 无法为云端 CNAME 指定没有子域的路由 53 记录的主要内容,如果未能解决你的问题,请参考以下文章
静态网站托管中子域的 AWS S3 存储桶重定向与 DNS CNAME
AWS Certificate Manager,无法获取子域的 https
将 cloudfront 通配符 CNAME 子域路由到 s3 存储桶中的文件夹