1

我有以下 PAC 文件代码:

function FindProxyForURL(url, host)
{
    return "PROXY proxy1:8080" + "PROXY proxy2:8080; ";
};

根据Java,这应该如下工作(https://docs.oracle.com/cd/E19575-01/821-0053/adyrr/index.html):

在下面的示例中,返回值告诉浏览器在端口 8080 上使用名为 w3proxy.example.com 的代理。如果该代理不可用,则浏览器在端口 8080 上使用名为 proxy1.example.com 的代理:

代理 w3proxy.example.com:8080; 代理 proxy1.example.com:8080

在实验室进行测试时,资源管理器似乎在负载平衡模式下使用这些代理。我没有在wireshark 中看到对这些代理的任何探测,但是在重新加载一些网站后会发生故障转移。

浏览器如何确定代理是否存在的天气?根据一些网站,它说浏览器也在负载平衡中使用这些代理,这是正确的吗?

提前致谢。

4

1 回答 1

0

健康的用户代理将简单地获取 PAC 文件返回的第一个代理,并尝试将流量转发到为其域名返回的 IP 地址。

现在,该 IP 可能不会在该端口上响应来自客户端系统的 SYN 数据包,或者如果它没有运行 Web 代理服务,它可能会提供自己的页面。在第一种情况下,浏览器将在几秒钟的 TCP 超时后切换到辅助代理(但它可能会根据客户端上 TCP/IP 堆栈的配置而有所不同)。在第二种情况下,用户代理/浏览器很高兴,因为它得到了对请求的响应,即使它不是它想要访问的 Web 资源。

  • 对于第一个示例,您可以尝试使用 4.2.2.2:80 作为第一个代理并观察。它是一个 NTP 服务器,不监听 80,所以你很快就会超时。

  • 对于第二个示例,您可以尝试使用 Purple.com:80 作为第一个代理。它是一个普通的网络服务器。无论您发送什么请求,它都会提供自己的页面,但 PAC 文件渲染器不会尝试辅助代理,因为它正在获得响应。

现在出现代理名称解析为打开并运行 Web 代理服务的 IP:port 套接字的场景。让我们考虑一种情况,其中 Web 服务器只喜欢来自某些列入白名单的源 IP 的请求,并且该 Web 代理未在其中列出。

  • 代理服务器将响应客户端并尝试与预期的 Web 服务器建立连接,但服务器不会响应。代理服务器尝试访问相关 Web 资源的次数以及它与客户端保持打开连接的时间取决于代理服务的实现。

  • 在特定持续时间后,连接将超时,客户端的用户代理将尝试 PAC 文件中可用的下一个代理语句。

这是对用户代理(通常是 Web 浏览器)如何确定代理是否处于活动状态的响应。

现在,关于负载平衡的第二个问题,这绝对是不正确的。默认情况下,浏览器只会在我上面提到的场景中切换到下一个代理语句。但是,如果您愿意,您可以在 PAC 文件中调用函数 myIpAddress() 并解析它返回的 IP 地址的子网部分。然后,您可以为不同的子网应用单独的代理语句。我见过不少组织使用这种糟糕的技术通过 PAC 文件配置来实现基于源 IP 的负载平衡。

于 2015-12-15T20:26:11.950 回答