我们的网站已关闭,因为我们的托管服务提供商已停止营业,并且用于在 AWS 上配置生产和开发服务器的后台域名已过期。我们无法访问此域名,也无法联系到旧提供商的任何人。当前的 DNS 设置如下:
companyname.com [CNAME www is an alias of prod.company-deadhost.com] ->
companyname-deadhost.com [NS ns-2048.awsdns-64.com, ns-2049.awsdns-65.net, ns-2050.awsdns-66.org, ns-2051.awsdns-67.co.uk] ->
[IP we don't know] The website server
我们对 companyname.com 具有完全访问权限,但对 companyname-deadhost.com 没有访问权限,并且我们无法检查是否曾经存在任何 A 或其他记录。我看过 AWS / Route 53 文档,其中说设置域名并使用 Route 53 NS 记录是将 Web 服务器连接到域名所需的全部操作(即,您不需要 IP 地址或任何东西)呃,没有,我还没有 - 看起来我们也需要 IP 地址。
我们无法访问 companyname-deadhost.com,但我可以使用这些 NS 记录(不是上面的记录,我们找到了原始记录)设置一个新的“中间”域,例如:
companyname.com [CNAME www is an alias of prod.newmiddledomain.com] ->
newmiddledomain.com [NS ns-2048.awsdns-64.com, ns-2049.awsdns-65.net etc etc] ->
[IP we don't know] The website server
Web 服务器上的流量仍将来自“companyname.com”,并且必须设置 Web 服务器以允许这样做 - 所以它应该可以正常工作?或者尽管如此它还是会失败,因为它来自 newmiddledomain.com 而不是 companyname-deadhost.com。
我需要尽快在域名上获取一些东西,如果这不可能奏效,我宁愿不浪费时间尝试这个并等待 DNS 记录传播...如果没有 EC2 实例的 IP,我们看起来就会陷入困境,所以这更像是一个假设......
整个 CNAME 和/或 NS 链并不重要¹,并且不存在“它通过......”这样的事情 - 您的 HTTP 请求本身不会通过 DNS,而是直接发送到已解析的服务器。
因此,客户端 Web 浏览器仅关心最终的 A/AAAA 结果(用于与某个 IP 地址建立 TCP 连接),而 Web 服务器仅关心原始 URL 域(进入 HTTP 的主机标头)并且大多不关心 DNS — — 甚至可能没有服务器的 DNS 条目。
此外,DNS 记录并不完全“传播”到全球(除了您自己的名称服务器之间的近乎即时的传播);更准确地说,它们是缓存的(从某种意义上说,这是一种“按需拉取”模型,而不是“主动推送”模型)。这意味着每个人看到更改所需的时间不是由全球 DNS 基础设施固定的,而是在您的控制之下 -旧数据上设置的 TTL 参数限制了在客户端和 DNS 服务器必须重新查询之前可以缓存该数据的时间。
这意味着您可以通过提前准备来快速进行更改:将旧记录的 TTL 缩短至 5 分钟左右,等待更改“传播”(即之前的缓存过期),现在下一个更改最多在 5 分钟后可见 - 并且在最坏的情况下可以在 5 分钟后撤消。一旦您对结果感到满意,将 TTL 重新提高到 30 或 60 分钟。
¹ 有几件事需要手动跟踪 CNAME 链到其末端(特别是 CNAME;NS 不参与其中)以确定服务器的“规范”名称 - 例如 Linux 上的 Kerberos - 但 HTTP 不是其中之一。