如何对特定域使用自动配置代理PAC文件

时间:2020-01-09 10:40:48  来源:igfitidea点击:

如何使用PAC文件自动配置代理设置以隐藏一个域并直接连接其他所有域?
如何在PAC文件中指定URL以绕过代理服务器?
如何使用PAC文件创建例外?

PAC文件只不过是代理服务器自动配置文件。
这是浏览器调用的专用JavaScript函数定义,用于确定如何处理请求。
换句话说,大多数PAC文件开发都需要Javascript技能。

语法

PAC文件的一个非常简单的示例是:

function FindProxyForURL(url, host)
   {
      return "PROXY server1.theitroad.local:3128; DIRECT";
   }

您需要在Web服务器DocumentRoot中创建并上传proxy.pac文件。
该文件为浏览器在端口3128上使用server1.theitroad.local的每个请求设置一个基本的代理服务器。
Firefox,Chrome,Opera和IE使用您的计算机的系统代理设置来连接到网络。
但是,您可以通过访问网络设置选项来更改这些设置。
您需要提供proxy.pac文件的URL。
在"自动代理配置URL"框中,执行proxy.pac文件的URL,例如http://192.168.1.100/proxy.pac或http://server1.theitroad.local/proxy.pac:
设置firefox pac文件网址

例子

在此示例中,您将代理服务器用于foo.example.com,并直接连接到所有其他站点。

function FindProxyForURL(url, host) {
    if ( localHostOrDomainIs(host, "foo.example.com") ) {
        return "PROXY server1.theitroad.local:3128";
    } else {
        return "DIRECT";
    }
}

此proxy.pac文件允许通过代理服务器连接各种主机/域,并将其余主机直接连接到Internet:

function FindProxyForURL(url, host) {
    // Your proxy server name and port
    var proxyserver = 'server1.theitroad.local:3128';
    //
    //  Here's a list of hosts to connect via the PROXY server
    //
    var proxylist = new Array(
        "theitroad.com",
        "reddit.com",
        "www.theitroad.local",
        "mail.google.com",
        "www.pandora.com",
        "www.google.com"
    );
    // Return our proxy name for matched domains/hosts
    for(var i=0; i<proxylist.length; i++) {
        var value = proxylist[i];
        if ( localHostOrDomainIs(host, value) ) {
            return "PROXY "+proxyserver;
        }
    }
    return "DIRECT";
}

您创建的PAC文件很容易修改,以指定将绕过代理或包含在代理中的任意数量的URL,即可以使用以下语法创建例外:

if (shExpMatch(url, "*.slashdot.org/*"))
   {return "DIRECT";}

或通过代理服务器连接reddit.com:

if (shExpMatch(url, "*.reddit.com/*"))
   {return "PROXY proxy42.ca.theitroad.local:8080";}