Heroku 中他们的文档讨论一下如果您依赖 IaaS 或 PaaS,为什么应该避免使用裸域。
还有ServerFault 上现有的问题,但它没有解决我的问题。
我理解了他们的解释。我感到困惑的是 IP 的缓存。Heroku 声称他们可以在 DNS 设置中更改端点的 IP,这样一切都会好起来。但是,大多数浏览器/代理/客户端不是都会缓存该 IP 吗?TTL 值并不总是受到尊重。此外,该 IP 传播的速度有多快?请求不会仍然转到旧 IP 吗?
答案1
您可以使用 CNAME,例如 www.example.com,以便它指向 magic-squirrel.herokuapp.com(或任何其他地址)。magic-squirrel.herokuapp.com 将解析为 Heroku 分配给该端点的任何 IP,例如 1.1.1.1。如果 Heroku 需要进行某些网络重新配置,该 IP 可能会更改,但 magic-squirrel.herokuapp.com 将更新为指向 2.2.2.2。在 TTL 到期后,www.example.com 将自然跟进。在这种情况下,您不会因为 Heroku 为管理其网络所做的事情而中断服务。
你不能对裸域 example.com 使用 CNAME。相反,您需要使用 A 记录。如上所述,您的应用程序在 magic-squirrel.herokuapp.com 上运行,其 A 记录为 1.1.1.1。由于您无法对该名称进行 CNAME,因此您必须为 example.com 创建 A 记录以指向 1.1.1.1。一段时间后,Heroku 会进行网络配置,magic-squirrel.herokuapp.com 现在指向 2.2.2.2。您的 example.com 现在神秘地坏了。您需要注意 magic-squirrel.herokuapp.com 不再位于 1.1.1.1 上,并相应地更新您的 DNS。
答案2
尽管CNAME
可能具有较高的 TTL,但缓存的值是别名,而不是别名后面的 IP(或至少应该别名)。
因此,虽然具有较高的 TTL 来CNAME
利用缓存,但目标CNAME
可以具有非常低的 TTL,以允许更频繁地更改它,特别是允许自动更改它而不触及您自己的 DNS 记录。