我有一个托管在 Azure 中的 Web 应用程序,它为我提供了一个“自定义”域awesomeapp.cloudapp.net
,并且在设置中我可以看到 IP 地址:123.456.789
www.awesomeapp.com
我们有一个指向宣传公司和应用程序服务的登陆页面的域名,并且我配置了如下 A 记录:
app.awesomeapp.com
=>123.456.789
效果很好。
问题是,有时我们必须关闭虚拟机,而再次打开时 IP 会有所不同,因此 A 记录不再起作用。如果我设置这样的 CNAME 记录是否有效?
app.awesomeapp.com
=>awesomeapp.cloudapp.net
这样可以解决每次打开/关闭机器时 IP 不同的问题。这样可行吗?CNAME 就是用来干这个的吗?这是个好做法吗(就性能和安全性而言)
答案1
正是出于这个原因,使用 CNAME 是 Azure 的标准做法,它可以防止 IP 更改成为问题。
如果出于某种原因你需要使用 A 记录,那么你可能想要使用保留 IP,即使您重新启动或关闭虚拟机,它仍将保持不变。
答案2
针对 CNAME:
存在(微小的)性能损失,因为下游 DNS 缓存需要执行 2 次 DNS 查找,一次查找 CNAME,一次查找 CNAME 指向的 A 记录。关于 CNAME 的“权威性”较低或兼容性问题的含糊、虚假的论点。
支持 CNAME:
它们在硬件(物理服务器)和服务之间提供了清晰的抽象。它们简化了 DNS 管理 - 当服务器移动时,您只需更改一条记录。在尝试了几种不同的方法后,我现在有了个人最喜欢的风格。它是:
每个物理服务器一个 A 记录;TTL 值相当低(可能为 30 分钟);为服务器提供一个人性化的名称。每个服务一个 CNAME;TTL 值较高(可能为 24 小时);指向上述服务器名称。作为上述规则的唯一例外,域根是 A 记录,指向 Web 服务器/Web 负载均衡器。(@ 必须是 A 记录。)我发现此设置效果很好。它使 CNAME 的额外 DNS 查找保持低位;如果服务器崩溃,我仍然可以相当快地更改公共 DNS。
以下是 BIND 语法的一个(即兴)示例:
;name ttl class rr value
server01 30m IN A 192.168.0.3
server02 30m IN A 192.168.0.4
webmail 24h IN CNAME server01
extranet 24h IN CNAME server02
ftp 24h IN CNAME server02