![通过 http 代理进行故障转移,但不进行负载平衡](https://linux22.com/image/569327/%E9%80%9A%E8%BF%87%20http%20%E4%BB%A3%E7%90%86%E8%BF%9B%E8%A1%8C%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%BF%9B%E8%A1%8C%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1.png)
我们希望有一个主要的“测试” http 代理,并用它来做一些独特的事情。我们希望这个代理成为主要代理,因此使用 WPAD,我们希望将其作为始终使用的主要代理,而将另一个代理作为辅助代理(两个主机名)。这会起作用吗?还是浏览器会随机选择两者之一并进行负载平衡。
我想到也许可以返回一个 DNS 条目,然后在该 DNS 中放入两个 IP,并让发送回浏览器的顺序始终相同,这样可以工作,但我听说有时 Firefox 会在每个请求上继续尝试使用 DNS 中的失败条目,而 IE 实际上会切换并继续使用辅助条目。(我想我可以更进一步尝试监听第一个代理并更改 DNS 条目……但我不想做这样的工作)。
有什么方法可以仅使用 WPAD 来实现这一点吗?
答案1
一般来说,如果您的 WPAD 返回类似以下内容:
“代理测试代理:8080;代理备份:8080;直接”
浏览器将仅尝试与列表中的第一个建立连接,如果连接失败,则移动到有序列表中的下一个。
另请参阅维基百科条目。
使用您描述的 DNS 解决方案,客户端可能不会关心是否有两个 IP 与一个名称相关联;如果它尝试了该名称,那么它就会放弃它。
并且每个浏览器对上述代码的行为可能略有不同。如果您不想使用 HTTP 负载平衡器来提供故障转移,那么基本上就是 WPAD 或 DNS,而 DNS 是一种更糟糕的方法。
DNS 可能会导致类似于“负载平衡”的行为,但在 WPAD 中使用有序列表则不会。故障转移行为可能很棘手,也可能很糟糕,但关闭浏览器通常足以重置它。
答案2
您提出的 DNS 解决方案称为 DNS 循环,它不会满足您的要求。对于每个解析请求,您都可以在响应中获得任一 IP 作为主 IP。它被认为是 [非常] 穷人的负载平衡,而不是故障转移的解决方案。
您会希望将测试服务器放在列表的第一个位置,就像您提到的以及 TristanK 所说明的那样。