【问题标题】:Possible to force the client to try the next A record after PHP interpreter starts?PHP解释器启动后可以强制客户端尝试下一条A记录吗?
【发布时间】:2013-05-22 08:04:09
【问题描述】:

我怀疑一旦连接被接受,这是不可能的,但我确实没有足够的浏览器实现或 DNS 标准知识来确定。问题是,一旦客户端(Web 访问者)与已解析的 Web 服务器建立了连接,是否可以使用该服务器上的 PHP 脚本来强制客户端尝试连接到下一个可用的 A 记录(就好像服务器已经从未联系到或确认请求开始)?

我宁愿远离重定向,除非可以通过某种方式确定客户端在循环 DNS 配置中接收到的 A 记录的顺序(我不相信服务器可能知道)。

【问题讨论】:

  • 不是在 PHP 中,而是通过负载平衡见 haproxy
  • @Baba 如果我的理解是正确的,负载均衡器也不知道 A 记录排序...它只是在其集群中的节点之间分配传入流量。

标签: php dns nameservers


【解决方案1】:

这是浏览器-DNS交互的过程:

(我会将查询传递给 TLD,这在此处无关紧要)

浏览器请求域的 DNS 访问正确的 IP。

DNS 根据自己的内部规则决定将哪个 IP 发送给浏览器。

浏览器的DNS回答“这个域有这个IP”

永远无法“影响”DNS。

所以不,一旦通信开始并且 TCP/IP 通道打开,您就不能“跳转”到另一台服务器。

现在,如果你想这样做,除了使用 301 或 302 重定向之外别无他法

再一次,如果你必须这样做,我猜你的负载平衡肯定是错误配置的。

DNS 负载平衡器应该知道 IP 分派规则您分派它们之前。如果没有发生这种情况,则说明您的配置有误,或者您没有安装或编程您必须要做的事情。

【讨论】:

  • 我指的是一个站点配置了多个A记录的情况,这种情况下会返回多个IP地址给客户端,而不是上面所说的一个。另外,我没有在问题中提及负载平衡。也就是说,如果其余的响应是正确的,这似乎证实了我的怀疑,即在连接后不可能跳过当前的 A 记录。
  • 实际上,IP 的选择是“在”向服务器打开会话之前进行的,而不是之后。当您无法拥有专用的负载平衡器(软件或硬件)时,在域的 DNS 中拥有多个 IP 是最简单的负载平衡技术
  • 感谢您的输入,但我不是在这里谈论负载平衡。轮询 DNS 当然可以用作负载平衡的简单方法(尽管大多数情况下没有任何相关的负载信息),但这是第三个问题。
猜你喜欢
  • 2016-03-28
  • 1970-01-01
  • 2018-10-08
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多