通知浏览器,他们应该刷新他们的DNScaching?

我们为我们的networking服务器设置了故障转移设置,在那里我们镜像我们的实时networking服务器,以防某种硬件或连接故障。 目前,这个过程要求我们更新DNS,这显然是在传播和caching的摆布。 这些日子的传播很快,但似乎caching变得更加粘性。

我们没有想过要采用更复杂的负载均衡解决scheme,因为在我们实施这个设置后的近五年内,没有任何理由要做一个意外的从现场切换到故障切换。 现场服务器硬件规格高,function强大,使用RAID存储,并与大型柴油发电机和多个大型互联网pipe道共同位于一个大型数据中心。 即使是去年发生的大规模全州停电,也不会影响我们的服务器和站点。

但是,我们确实使用故障转移来计划停机 – 例如每6个月执行一次网站更新。 我们在我们的DNS中进行切换,然后必须等待stream量停止在活动服务器上,这样在更新时我们不会中断用户。

那么,有没有办法让Apache HTTPD(某种HTTP标头)告诉用户的浏览器他们应该为我们的域刷新他们的DNScaching?

您的问题的问题是有缺陷的假设,即客户端浏览器与DNSparsing有任何关系。 在几乎所有情况下,他们都没有。 他们让底层操作系统的DNSparsing器处理名称parsing和caching机制。

如果您的故障转移策略与DNSlogging更改相关联,则更快客户端转换的唯一select是降低相关logging上的TTL值。 TTL决定了客户端caching查找结果的时间。 注意:也可以降低整个DNS区域的TTL。 但是这不可能是你想要或者需要的。

迁移到更传统的负载平衡器可以将虚拟/浮动IP地址放在真实服务器的IP前,从而解决您的问题,因此您不必进行任何DNS更改,故障转移或多或less都是瞬间的。

我不相信要求人们冲洗他们的DNScaching是实际的。 大多数普通人不知道DNS是什么,不知道caching是什么,即使提供了基于电话的技术支持,也无法冲洗DNScaching。 想想不得不在路由器中刷新DNScaching – 有数百种路由器型号。 如果你的客户都是高度技术的,也许这是一个更实际的,但消费者,没有。

我认为你需要一个可以控制的技术解决scheme。

您可能最好使用专为此devise的DNS服务,如AWS Route 53. R53可以与任何服务器一起使用,不仅仅是AWS服务器/服务。 R53可以像负载平衡器一样工作,有多种路由types – 故障切换,加权,延迟等。您可以使用故障切换路由,以便在主要故障时自动路由到备份服务器。

另一个选项,我相当肯定不会工作,是使用多个Alogging。 这里的问题是浏览器使用哪个logging? 从我读过的印象中,浏览器应该随机使用Alogging,但是他们不使用第一个 – 尽pipe我不知道“first”是如何定义的。 使用DNS分配负载的服务往往会随机分配返回的IP地址的顺序。

在评论中提到的另一种select是反向代理。 我原本没有包括这个,因为这意味着更多的硬件。 如果您将反向代理或负载平衡器放在服务器/服务之前,它可以将stream量redirect到需要的任何位置。 我上面的使用Route53的build议会执行类似的function,但不是很好,但可能比标准的DNS好一点。

一个302临时redirect可能被使用,但是你需要一个能够在主服务器closures的时候持续发送这些redirect的服务器。 这将需要额外的硬件,但不是很多的硬件。

有没有办法让Apache HTTPD(某种types的HTTP头)告诉用户的浏览器,他们应该刷新他们的DNScaching。

没有这样的机制存在,所有现代的网页浏览器和他们执行的代码在沙箱中运行,他们不应该能够改变操作系统的设置。

本地DNScaching不是由用户的浏览器pipe理的。 它在操作系统级别进行pipe理。 更改本地DNScaching是pipe理员活动。 出于安全原因,浏览器不能在主机上执行pipe理function。

你需要的是一个服务器端的解决scheme。 这种types的问题的常见解决scheme是使用反向代理 ,如nginx或apache 。

要以允许主服务器和备用服务器都停机的方式来执行此操作,可以在具有一个或多个专用IP地址的虚拟机中运行反向代理。 这样你(或你的云提供商)只需要维护虚拟机; 支持它的硬件可能会波动。

您的设置将是:

  • 面向公众的VM:www.yourdomain.com
  • 后端主服务器:<主IP地址>
  • 后端备份服务器:<备份的IP地址>
  • 您的网站的DNS指向VM http://www.yourdomain.com

如果使用nginx,则代理的公共网站将作为文件定义存储在站点可用目录中,并通过将它们链接到启用站点的目录进行激活。 您可以为每个后端服务器定义一个网站定义,并通过更改符号链接来切换它们,或者您可以为每个后端机器使用一个proxy_pass指令的网站定义,但是其中一个指令会被注释掉。

无论你如何设置,切换后端所有你需要做的就是改变站点文件,然后告诉nginx重新加载它的config: service nginx reload

下面是一个示例站点文件,每个后端都有一个proxy_pass指令,其中一个被注释掉了:

 server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; location / { proxy_pass http://<ip address of main>:80; # proxy_pass http://<ip address of backup>:80; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

除此之外,你可以做的更多,包括在反向代理上caching静态内容,但是这么多事情应该让你开始。