如何强制刷新网站的DNS缓存?

62

我正在将我的网络应用程序迁移到另一台服务器,并在接下来的几天内刷新DNS以指向新的IP位置。

不幸的是,一些浏览器和操作系统会保留DNS缓存,这将使用户指向旧的IP位置。 一些用户是新手,他们不会手动刷新DNS缓存,我知道在此更改后的前几周我们会失去很多他们。

有没有办法强制刷新DNS缓存,使其对我们的最终用户透明?


13
谷歌允许您清空DNS缓存:https://developers.google.com/speed/public-dns/cache - Nehal J Wani
5个回答

50
据我所知,像这样的强制更新是不直接可能的。如果您的名称服务器服务提供商允许,您可以在更改条目之前通过减少TTL(生存时间)值来减少DNS停机时间。这里有一份更少痛苦的DNS更改指南。但要注意,不是所有位于客户端和权威(源)名称服务器之间的名称服务器都会强制执行您的TTL,它们可能有自己的缓存时间。

17

没有确保用户清除DNS缓存的方法,通常这是由他们的ISP在其操作系统上完成的。更新DNS传播不应该需要超过24小时。您最好的选择是通过使用像Apache中的mod_proxy这样的工具来创建一个反向代理将转换对用户无缝进行。这将导致所有查询仍然返回正确结果,并且几天后您将可以删除反向代理。


最接近的选项是301重定向永久移动,这只适用于域切换。您无法强制用户清除DNS缓存,在许多情况下,即使他们想要清除,也无法清除(因为ISP也会缓存)。如果可以的话,我能看到的最好的选择是从旧服务器临时反向代理到新服务器,以便将该域的所有查询发送到新服务器。 - Jammerx2
13
另一个好主意是在进行更改前几天降低DNS的TTL。这将导致ISP更频繁地检查DNS更新,从而使迁移过程更加顺利。您应该将TTL设置为最低可能值(然后在更改完成后一段时间再增加它)。 - Jammerx2

12

您无法强制刷新,但可以将所有旧IP请求转发到新的IP。

对于一个网站:

将[OLD_IP]替换为旧服务器的IP

将[NEW_IP]替换为新服务器的IP

运行并获胜。

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -d [OLD_IP] -p tcp --dport 80 -j DNAT --to-destination [NEW_IP]:80

iptables -t nat -A PREROUTING -d [OLD_IP] -p tcp --dport 443 -j DNAT --to-destination [NEW_IP]:443

iptables -t nat -A POSTROUTING -j MASQUERADE


1
如果您无法访问DNS的TTL(在许多托管服务器上都是如此),这是一个完美的解决方案 -- 如果旧服务器不需要仍然在端口80上运行Web服务器... - Rainer Keller
我该如何还原这个? - Stephan Hoyer
修改hosts.conf文件不是更容易吗?如果使用进行NAT的计算机,则可以在其中安装DNS服务器,并再次修改hosts.conf。 - Rastersoft

0

如果问题是您刚创建了一个网站,但您的客户或任何给定的ISP DNS已被缓存,并且尚未显示新站点。是的,所有其他内容都适用于ipconfig重置浏览器等。但是这里有一个想法,也是我偶尔会做的事情。您可以在NIC属性上的tcpip属性中设置备用网络ISP的DNS。因此,如果您的ISP是Telstra并且尚未传播或更新,则可以在那里指定替代服务提供商的DNS。如果该ISP DNS在您的本机DNS之前更新,那么您将看到新站点。但是还有很多其他技巧可以确定传播并使邮件在DNS更新之前工作。如果有人想聊,请给我留言。


-1

可能可以完全删除区域记录,然后像您想要的那样重新创建。也许这会强制执行完整的传播。如果我错了,有人告诉我,我会删除这个建议。同时,我不知道如何使用 WHM 或任何其他工具保存区域记录并重新创建它。

我知道今天当我删除并重新创建一个托管帐户时,原始的区域记录似乎瞬间传播到了我的电脑上游的 DNS 解析器。这是它工作的良好证据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接