我在 PAC 文件中遇到了这种奇怪的行为。我有一个现有的 PAC 文件,它运行良好。由于最近的迁移,我不得不开始修改 PAC 文件,并从代理中排除一些 IP 和 URL,主要是针对 MS Teams。
测试修改后,我发现浏览时延迟非常大。在处理 PAC 文件时,我对其进行了调整,以减少网络请求并一次性解析域名,然后检查 IP 地址。然而,这导致所有需要使用代理的网站都无法正常工作。
以下是我更新的 PAC 文件,删除了其中的一些细节:
function FindProxyForURL(url, host) {
if(!isResolvable(host))
return "DIRECT";
var resolved_IP = dnsResolve(host);
if ((shExpMatch(url, "ctldl.windowsupdate.com")) ||
(shExpMatch(url, "download.windowsupdate.com")) ||
(shExpMatch(url, "windowsupdate.microsoft.com")) ||
(shExpMatch(url, "update.microsoft.com")) ||
//check for local IP addresses
(isInNet(resolved_IP, "127.0.0.1", "255.0.0.0")) ||
(shExpMatch(url, "*.internaldomain1.com")) ||
(shExpMatch(url, "*.internaldomain2.com")) ||
(shExpMatch(url, "*.internaldomain3.com")) ||
(shExpMatch(url, "internaldomain4.com")) ||
/* Skype for Business and MS Teams */
(isInNet(resolved_IP, "52.112.0.0", "255.252.0.0")) ||
(isInNet(resolved_IP, "52.120.0.0", "255.252.0.0")))
return "DIRECT";
else
if (url.substring(0, 5) == 'http:' ||
url.substring(0, 6) == 'https:' ||
url.substring(0, 4) == 'ftp:')
return "PROXY <Primary Proxy IP>:8080; PROXY <Secondary Proxy IP>:8080";
return 'DIRECT';
}
我不确定我在这里遗漏了什么导致请求被拒绝。
我还在 Firefox 上启用了开发者工具,并看到了被阻止的请求(但不是每次都有)
=============================
更新:
修改前的 PAC 文件
function FindProxyForURL(url, host) {
if (shExpMatch(url, "ctldl.windowsupdate.com")) { return "DIRECT"; }
if (shExpMatch(url, "download.windowsupdate.com")) { return "DIRECT"; }
if (shExpMatch(url, "windowsupdate.microsoft.com")) { return "DIRECT"; }
if (shExpMatch(url, "update.microsoft.com")) { return "DIRECT"; }
//check for local IP addresses
if ((shExpMatch(host, "127.0.0.1"))
|| (shExpMatch(host, "*.domain1.com"))
|| (shExpMatch(host, "*.domain2.com"))
|| (shExpMatch(host, "*.domain3.com"))
|| (shExpMatch(host, "domain3.com"))
) { return "DIRECT"; }
if (url.substring(0, 5) == 'http:' ||
url.substring(0, 6) == 'https:' ||
url.substring(0, 4) == 'ftp:')
{
return "PROXY <Proxy1>:8080; PROXY <Proxy2>:8080";
}
return 'DIRECT';
}
答案1
首先,这是非法的 -shExpMatch(url, "*.internaldomain1.com"
因为它并不总是正则表达式。这是合法的:
shExpMatch(url, "*.internaldomain1.com/*")
或者
shExpMatch(host, "*.internaldomain1.com")
您有主机匹配,但新 PAC 有 URL 匹配。不确定它是否与代理站点问题有关。为此,我们必须知道拒绝意味着什么 - 访问哪个站点时出现什么错误。