更改子域名的 IP 地址后是否需要停机?

更改子域名的 IP 地址后是否需要停机?

我有一个子域名,我想更改其 DNS A 记录。执行此操作后,我是否需要等待一段时间才能反映更改?

如果是,那么在停机期间是否可以向访问刚刚编辑的子域的用户显示“停机消息”?

答案1

更改 DNS 时,更改需要一些时间才能在整个互联网上传播。根据您的 ISP/位置,可能需要几秒钟到 48 小时。

您可以使用旧 IP 设置临时网络服务器,以通知用户即将进行的 DNS 更新,并将他们转发到同样指向新 IP 的新建子域。这些通常传播速度更快。

一旦 DNS 调整生效,用户将自动被引导至新 IP。当临时服务器不再收到任何请求时,您可以确定该过程已完成。

更改服务器和 IP
1.2.3.4 = 旧 ip
1.2.3.5 = 新 ip
移动所有需要移动的内容。

开始:

mydomain.com.       A     1.2.3.4

更改至:

mydomain.com.       A     1.2.3.5
new                 A     1.2.3.5

将 1.2.3.4 处的网络服务器更改为显示转发到 new.mydomain.com 的启动页面。

在同一台服务器上更改 IP
如果您不更改服务器,只更改 IP,请更改虚拟主机以侦听两个 IP 并更改 A 记录。随着 DNS 传播的进行,用户将慢慢开始使用新 IP。

NameVirtualHost 1.2.3.4
NameVirtualHost 1.2.3.5

<VirtualHost 1.2.3.4 1.2.3.5>
    DocumentRoot /www/mydomain.com
    ServerName server.mydomain.com
    ServerAlias server
</VirtualHost> 

答案2

是的,由于 DNS 更改的缓存方式,因此存在传播延迟。延迟长度由记录的 ​​TTL(“生存时间”)值控制。如果您没有明确将其设置为其他值,则延迟时间将在 3 到 24 小时之间,具体取决于您的注册商。有些注册商允许您更改 TTL(如果您托管自己的 DNS,您可以完全控制),但请注意,TTL 的更改将需要旧 TTL 的长度才能传播。

要了解您的 TTL 设置为何值,请检查您的注册商的控制面板是否显示该值。如果没有,则创建一个新的子域 A 记录并运行dig sub.domain.tld。在输出中,您将获得类似以下内容:

;; ANSWER SECTION:
sub.domain.tld.      3600     IN      A       11.22.33.44

这表明 TTL 值为 1 小时(3,600 秒)。如果一分钟后再次执行此操作,您应该会看到:

;; ANSWER SECTION:
sub.domain.tld.      3540     IN      A       11.22.33.44

这意味着您的本地 DNS 缓存将在 59 分钟内重新检查该值。

通过使用这样的新子域,您知道该值尚未缓存,因此您在第一次查询时会看到完整的 TTL。dig几乎在每个 Linux 设置中都可用(如果未安装,您通常会在包“dnsutils”中找到它),并且可以通过 Cygwin 在 Windows 上使用(如果您不想要更完整的 Cygwin 安装,您可以尝试部分复制,例如这个只包括 dig、host 和 whois

要记住的一件事是,如果用户的 DNS 缓存最近没有被询问过该特定名称,他们将在下一次请求时立即获得新值,因此 TTL 为两个小时,所以在传播期间,您应该期望对两个 IP 地址的请求。

如果您控制旧 IP 地址指向的机器,并且它不运行任何其他网站,则可以安装重定向器,例如rinetd代理到新地址的连接。这样,即使访问旧地址的人也可以看到新服务器的内容(只是速度稍慢)。如果那里托管了其他域,您可以使用 mod_proxy(或您的 Web 服务器的等效程序)来实现相同的目的。但是,如果传播期足够短,您可以将该服务器上该网站的所有页面替换为“该网站将在 X 小时内恢复”消息,这显然更容易。

或者,你可以在更改前一两天将 TTL 设得很短 - 这样传播延迟无论如何都会很短。实际上,我的 TTL 永久设置为五分钟。不要将其设置得太短:技术上来说,TTL 为 0应该意思是“永不缓存这个值”,但是一些有缺陷的 DNS 缓存和客户端软件会忽略低于某个值的任何值,而采用更高的值。

答案3

是的,DNS 传播可能需要几秒钟到几个小时(具体取决于您的地理位置和您所在地区的 DNS 服务器。您无法放置停机消息,因为只有当您的 A 记录已成功传播到世界上的每个 DNS 时,它才会显示。您可以做的一件事是,不要禁用旧服务器,因为除非 A 记录已正确填充,否则站点应该从两个服务器启动。

要验证 DNS 解析,请从互联网上获取公共 DNS 服务器列表并运行以下命令:

nslookup yoursite.com 8.8.8.8 <--google dns

nslookup yoursite.com 4.2.2.6 <-verizon dns

这样,继续检查随机 DNS 服务器。

答案4

如果您计划在将来这样做,请提前降低 A 记录的 TTL。
它仍然不会立即在所有地方更改,因此请预计两个 IP 都会被访问的时间范围。

如果您仍然拥有旧 IP,您可以显示消息、代理请求等。

相关内容