Networking

修改後 PAC 文件不起作用

  • November 1, 2020

我從 PAC 文件中得到了這種奇怪的行為。我有一個執行良好的現有 PAC 文件。由於最近的遷移,我不得不開始修改 PAC 文件,並從代理中排除一些主要用於 MS Teams 的 IP 和 URL。

測試修改後,發現瀏覽時存在極度延遲。在處理 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';
}

首先這是非法的——shExpMatch(url, "*.internaldomain1.com"因為它並不總是一個正則表達式。這是合法的:

shExpMatch(url, "*.internaldomain1.com/*")

或者

shExpMatch(host, "*.internaldomain1.com")

您有匹配的主機,但新的 PAC 有 url 匹配。不確定它是否與代理站點問題有關。為此,我們必須知道拒絕意味著什麼——訪問什麼站點時會出現什麼錯誤。

引用自:https://serverfault.com/questions/1040346