什么是PAC文件

什么是PAC文件?

PAC文件是在使用代理服务器的时候,告诉浏览器该如何选择的一个配置文件。所以PAC文件又称为代理自动配置文件。

PAC文件实质上是JavaScript代码。

如何编写PAC文件

下面是一个最简单的PAC文件代码:

function FindProxyForURL(url, host) {
    return 'DIRECT'
}

代码中声明了一个函数 FindProxyForURL(),这个函数是PAC文件必须的(函数名必须如此)。该函数接收两个参数 url 和 host,如果 url 是 https://feizhaojun.com/?p=2231,host 就是 feizhaojun.com。该函数返回值为“DIRECT”,意味着什么都没做,对于任何URL,都是“DIRECT”(直接连接)。

PAC文件的返回值有哪些?

除了 return ‘DIRECT’,还有 PROXY 和 SOCKS5:

  • PROXY 使用http代理,后面跟主机地址和端口
  • SOCKS5 使用socks5代理,后面跟主机地址和端口

例如:

function FindProxyForURL(url, host) {
    return 'PROXY host.proxy.com:3128'
}

或者

function FindProxyForURL(url, host) {
    return 'SOCKS5 socks5.proxy.com:1080'
}

也可以 return 多个类型:

function FindProxyForURL(url, host) {
    return 'DIRECT; PROXY host.proxy.com:3128; SOCKS5 socks5.proxy.com:1080'
}

上面返回值的意思是:

  • 对于所有 url,直接连接(DIRECT);
  • 如果不能直接连接,则使用PROXY,也就是http代理;
  • 如果还不能连接,再使用SOCKS5。

如果你确定知道某个url不能直接连接,需要使用代理,那么可以在函数中判断,做不同的返回值:

function FindProxyForURL(url, host) {
    if (shExpMatch(url,"*.google.com/*")) {
        // Google 不能访问,使用http代理
        return "PROXY host.proxy.com:3128";
    }
    if (shExpMatch(url, "*.wikipedia.com:*/*")) {
        // 维基百科网站使用 socks5 代理。
        return "SOCKS5 socks5.proxy.com:1080";
    }
    if (isInNet(host, "127.0.0.1", "dnsResolve(localhost)")){
        // 本地地址直接访问
        return "DIRECT";
    }
    // 不确定的情况,使用多种方式尝试
    return 'DIRECT; PROXY host.proxy.com:3128; SOCKS5 socks5.proxy.com:1080'
}

shExpMatch函数用来匹配url或者host,匹配的方式和DOS的通配符相似。例如前面用到的”.google.com/“可以匹配任意包含”.google.com/”的字符串。一般PAC文件不需要太复杂的匹配。

isInNet函数用来返回请求的host是否在指定的域内。值得注意的是,isInNet的第二个参数必须是IP,不能是主机名。因此需要把主机名转换成IP。比如上面的dnsResolve(localhost)。

更多PAC文件的介绍

PAC还提供了不少其它函数,这里列出了PAC代理文件中可以使用的JavaScript函数。

你也许想把pac文件发布到Internet上,这样其它用户就只需要在浏览器中指定pac文件的url即可。你得配置你的服务器映射 .pac 文件后缀到MIME类型: application/x-ns-proxy-autoconfig 如果使用的是Netscape服务器,编辑 config 目录下的 mime.types 文 件。如果是Apache, CERN or NCSA服务器,使用 AddType 指令。

这里有一些大家编写的PAC文件:

如何使用PAC文件?

Windows

Internet选项 -> 连接 选项卡 -> 局域网设置(如果是电脑拨号上网, 这里点’设置’) -> 使用自动配置脚本 -> 填入PAC地址 -> 确定

image

Mac OS X

系统设置 -> 网络 -> 高级 -> 代理 -> 自动代理配置 -> URL中填入PAC地址 -> 好

iOS (iPhone/iPad)

1 打开设置, 选择Wi-Fi

image

2 选择当前使用的热点

image

3 拖到最下面的代理设置,选择”自动”,填写PAC地址

image

Android

安卓由于5.0以下系统不支持此设置,请参考此帖下载第三方APP应用

您的赞助将会支持作者创作及本站运维

发表评论


TOP