更改站点IP地址的最佳方法-从最终用户的角度来看?


10

我确实在这里阅读了大量相关的问答,但是我仍然不确定最佳答案是什么。

我将几个站点从IP地址“ 1.abc”移到“ 2.def”。截至目前,在现有DNS中,我将所有TTL设置为300秒,并且我准备使用一个新的DNS区域(在AWS Route 53上),并在60秒使用新的名称服务器和所有TTL。因此,从DNS的角度来看,我相信我已经准备好了。移动后,几天后,我将在Route 53上将TTL设置为更合理的数字。

我已向所有用户发出有关此举的警告,并且有明确的举止时间。我告诉他们,一旦迁移完成并且如果24小时过去了,他们仍然看到旧的(锁定的)站点,他们应该重新启动计算机以强制刷新本地DNS缓存。

我不了解用户浏览器(缓存)在其中的作用。我自己对本地主机文件(Win7)进行的实验告诉我,浏览器中存在某些问题,该问题不允许旧IP地址消失-我必须进入历史记录->清除所有内容,才能显示新的网站位置甚至ipconfig /flushdns

(编辑)-我没有对旧服务器的root访问权,因此我无法实现对此问题公认答案

问题: 我真的不希望我的用户必须处理该问题,所以我可以做些什么来强迫所有浏览器重新缓存?如果是这样,我要打开多长时间?

谢谢...


My own experiments with a local hosts file (Win7) tell me there is something about the browser that is not letting the old IP address go您可以提供一些信息吗?Afaik,浏览器不会将DNS记录缓存超过1分钟。
坦美

不确定,但是在使用多个ipconfig / flushdns和“ ctrl-F5”(在Firefox中)之后,我继续从旧站点和新站点中混合使用页面...最终必须清除“所有内容”并重新启动浏览器。我不希望我的用户做类似的事情……
CC

如果您具有对新服务器的根访问权限,则JBTW,您提供的链接中的解决方案也可以使用。更新DNS记录,并将所有流量从新服务器转发到新服务器,直到DNS正确传播为止。
坦美

谢谢...但是后来我不得不再次将旧的同步回新的(数据库等),不是吗?
CC

在关闭转发之前,您将必须同步数据库一次。
坦美

Answers:


15

不,你不能。问题在于DNS响应可以缓存在用户和DNS服务器之间的任何位置,并且没有使它们无效的方法。

但是,您可以做的是-同步数据并且第二个站点准备就绪后,您可以重新配置原始服务器以充当代理并将所有请求传递到新位置。

这样,您可以使网站的停机时间几乎达到零。

更新资料

如果您没有超级用户访问权限,则有以下几种选择:

  • 在PHP中执行代理

  • 在第二台服务器上配置代理(如果您具有那里的root访问权),请切换DNS,并在准备好时将代理更改为Web服务器

  • 此方法可能是问题的根源。有2个地址(www.domain.tld和www2.domain.tld)。配置www2(与www相同)并设置正确的DNS记录。然后准备您网站的www版本并进行DNS切换。将旧服务器上所有请求的重定向设置为www2子域。


您介意对此进行一些扩展,还是指向我可以阅读的文章或问/答的指针?我没有对现有服务器的root访问权,所以我无法直接操作IP表...所以也许有另一种方法?
CC

@CC也许您有权使用HAProxy实例替换您的应用程序?还是将您的应用程序代码替换为纯粹将请求转发到新服务器的代码?
杰森·马丁

@JasonMartin-我可以访问.htaccess和应用程序代码。所以,是的,我可能可以获取请求的URL并转发到新的IP地址-也许我应该尝试一下?
CC

@CC听起来很有希望。DNS是“最终一致的”工具,某些DNS服务器在其TTL中设置底线,并且会忽略您的300s。如果您想避免在那里出现任何中断,最好选择转发代理。
杰森·马丁

4

从理论上讲,将域的TTL设置为较低值,然后等待该更改发生,然后更改IP,应该会导致近乎透明的迁移。毕竟,这就是TTL的全部要点。

在实践中,人们错误地配置了东西,工具中断了。这就是为什么如果事情无法正常进行,您可能需要向用户提供说明以清除其本地缓存。

你没有做错任何事。


我是否应该立即使用旧的 IP地址切换到新的AWS Route 53 DNS,然后在完成迁移后将IP地址更改为新的IP地址?-还是仅将DNS更改为新的DNS 并同时更改IP?
CC

1
@CC:我不是网络管理员,所以请稍作努力(我很高兴听到ServerFault专家的来信),但是我个人建议不要同时更改两者。整理好您的DNS,然后进行IP更改,并通过帮助您完成最后一部分来让新DNS发挥作用。
Lightness Races in Orbit 2013年

1
好吧,我尝试了一个实验。在一个站点上,我预先更改了DNS小时,然后在以后更改了A记录的IP地址。工作完美。我同时更改了另一个站点。在新旧IP地址之间徘徊了好几个小时-我终于删除了AWS Route 53区域,并以与第一个站点相同的方式对其进行了重新命名。工作完美。因此,无需捏盐-您被发现!
CC

1

您的旧地址不可避免地会被缓存和使用很长时间-大部分是由机器人程序使用的。

我该怎么做:

  • 创建一个A记录,例如www2.yourdomain.com,指向新IP。此记录以前不应使用过;因此从不缓存。
  • 将旧服务器上的查询重定向到 www2.yourdomain.com
  • 监控器重定向,当流量下降到可接受的水平时,请删除旧服务器。
  • 最后,一旦删除旧服务器,请重定向www2.yourdomain.comwww.yourdomain.com

确保使用301永久重定向。https://zh.wikipedia.org/wiki/HTTP_301


我的直觉是,他竟然没有使用301进行第一轮的重定向,但只有第二。他有什么特别的理由只能由具有深奥的SEO智慧的人知道吗?
2016年

@ Random832永久对象告诉用户代理忘记旧的URL,例如更新书签以指向新的URL(因此,下一次,他们可以直接访问新的URL)。稍后再次重定向(甚至重定向回原始URL)没有害处。另一方面,临时重定向会告诉用户代理保留原始url(因为重定向可能会发生在另一个目标上,或者下次根本不会发生)。因此,使用临时重定向,重定向监视将永远不会降至“可接受的水平”。
哈根·冯·埃岑

@HagenvonEitzen随着浏览器停止获取www.yourdomain.com的旧服务器的IP地址,它将下降到可接受的水平,这是DNS事项,不会受到所用HTTP重定向类型的影响。因此,“因为重定向可能会发生……根本不会在下一次出现”,这是正确的。
Random832 '16

0

听起来您打算同时更改名称服务器?由于发现名称服务器的方式,与常规记录相比,它们花费的更新时间要长得多-通常大约需要24小时或更长时间。

我强烈建议您更改DNS 之前先在当前提供商处更新DNS,或者在更改网站IP前7天更改名称服务器。

现代计算机和浏览器在通过DNS遵守TTL方面非常可靠,但是您需要了解整个链条才能获得最佳结果。


谢谢,是的,这反映了我在上面的“亮度”答案下的评论。解析器确实在几分钟之内就非常快地刷新了名称服务器。关键是先执行此操作,然后等待几个小时,然后再更改目标IP地址。两者都不好...非常糟糕。
CC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.