使用PAC文件实现浏览器自动代理

由于工作原因需要经常在不同的地方(办公室、家庭网络、机场酒店公共网络)接入到办公网络,而办公网络需要通过公司代理服务器才能访问互联网,同时公司IT部门提供了国内、海外等不同的代理服务器,这样就需要根据是否接入办公网络及访问对网址经常修改代理服务器(打开、关闭、修改不同对代理服务器等)。

目前各主流浏览器均支持Proxy Auto-Configuration (PAC) file自动设置代理,详细对配置指导可参考https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_(PAC)_file

今天主要讨论根据接入网络和访问的目标网址设置不同的代理服务器策略。

  • 需求一:根据是否接入办公网络选择不同的Proxy策略

    1. 通过家庭、酒店WIFI未(通过VPN)接入公司网络,本机localhost地址通常是192.168.x.x;
    2. 通过家庭、酒店WIFI(通过VPN)接入公司网络时,本机localhost地址通常是127.0.0.1;
    3. 通过办公室WIFI接入公司网络和场景2类似;
  • 需求二:根据目标网址选咋不同的Proxy服务器;

    1. 如果访问公司内网则不想要代理服务器;
    2. 如果是访问海外网络则选择海外Proxy服务器;
    3. 其他情况均使用国内代理服务器。
  • 通过PAC自动选择代理服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function FindProxyForURL(url, host) {
    //如果没有通过VPN接入公司网络
    if (isInNet(dnsResolve('localhost'),'192.168.0.0','255.255.0.0') ||
    dnsResolve('localhost') != '127.0.0.1' // 不同对公司网络可能有差异,可以使用nslookup localhost 查询
    ) {
    return 'DIRECT';
    }

    //如果访问的时公司内网
    if (shExpMatch(host, "*.mycompany.com")) {
    return 'DIRECT';
    }
    // 如果访问对的时海外网址使用海外Proxy
    if (shExpMatch(url,'*.google.com*') || shExpMatch(url,'*.github.com*') ) {
    return 'PROXY proxy_uk.mycompany.com:8080' +
    'PROXY proxy_hk.mycompany.com:8080';

    }else { //默认使用国内proxy,如果proxy不同则不使用
    return 'PROXY proxy_cn.mycompany.com:8080;' +
    'DIRECT'
    }
    }
  • 在浏览器设置PAC文件 各家浏览器均可以使用扩展或者命令参数设置PAC文件。这里推荐使用Proxy-Switcher扩展,该扩展支持Chrome/Edge/Firefox浏览器,具体参考:https://mybrowseraddon.com/proxy-switcher.html

使用PAC文件实现浏览器自动代理

http://mixiang.tech/2020/07/19/2020-07-19-00/

作者

Mixion

发布于

2020-07-19

更新于

2022-12-02

许可协议