我们正在将一些网站从其他提供商迁移到 AWS。我们当前的负载均衡器在单个 IP 上可用,因此所有 DNS 条目都是使用 A 记录创建的,例如:
A example.com 192.0.2.0
您可能知道,AWS Elastic Load Balancer 已经为其负载均衡器提供了 A 记录,因此网站是使用 CNAME 记录创建的,例如:
CNAME example.com production-lb1-<numbers>.us-west-1.elb.amazonaws.com
我们将该记录的 TTL 设置为 900 秒,但我们没有看到它传播出去
dig all example.com
是否存在一些神奇的 DNS 内部机制可以阻止此类名称冲突?例如,它不想创建 CNAME,因为 A 和 CNAME 指向的是相互矛盾的信息?
那么这是否意味着我必须删除 A 记录,然后添加 CNAME?DNS 控制器是否足够智能,不会丢弃没有任何指向我的网站?也就是说,当 CNAME 尚未启动时,我真的不希望 A 名称消失。您觉得呢?
答案1
什么是TTL 的老的一个记录? 例如,如果是 43200(12 小时),旧记录将保留在全球 DNS 缓存中长达 12 小时。
解决方案是在更改记录之前提前将旧记录的 TTL 降低到 300(5 分钟)左右。
你不能有域根目录中的 CNAME(又名 apex)。ie
example.com A 123.456.789.123
是有效的,example.com CNAME production-lb1-...elb.amazonaws.com
而无效。这可能就是您的 DNS 服务器忽略该操作的原因。解决方案是将域迁移
example.com
到 AWS Route53,然后使用ALIAS A
记录而不是CNAME
。这样,请求将example.com
返回 ELB 的实际 IP 地址,而不是 ELB 的 CNAME。这是一个细微但至关重要的区别。不幸的是,只有当域和负载均衡器都在 AWS 上时,ALIAS 才有效。
看这里:为什么域名的根不能是 CNAME
希望有帮助:)