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

Jeu*_*une 2 domain-name-system a-record subdomain apache-2.2

我有一个子域,我想更改其 DNS A 记录。这样做之后,我是否必须等待一段时间才能反映更改?

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

Bar*_*Vos 5

更改 DNS 时,更改在整个 Internet 中传播需要一些时间。根据您的 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
Run Code Online (Sandbox Code Playgroud)

更改为:

mydomain.com.       A     1.2.3.5
new                 A     1.2.3.5
Run Code Online (Sandbox Code Playgroud)

更改 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> 
Run Code Online (Sandbox Code Playgroud)


Dav*_*ett 5

是的,由于缓存的方式,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
Run Code Online (Sandbox Code Playgroud)

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

;; ANSWER SECTION:
sub.domain.tld.      3540     IN      A       11.22.33.44
Run Code Online (Sandbox Code Playgroud)

这意味着您的本地 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 缓存和客户端软件会忽略低于某个值的任何内容并假设更高的值。