文件作用

  1. 高自由度选择性配置哪些域名需要代理,哪些域名直接连接
  2. 一个文件配置所有设备代理连接
  3. 配合无软路由实现局域网设备连接同一个VPN可实现一个文件管理所有局域网设备
  4. 需要注意的是:pac.js无法代理udp连接,所以一些特殊软件就需要手动设置socks5模式

代码示例

// 代理地址 + 端口
const proxy = '10.10.1.10:20171';

// 需要代理的域名
// 只需要填写二级域名, 多级前缀会自动判断
// * 号代表通配符
const rules = [
    // wordpress
    'wordpress.org',
    // 头像
    'gravatar.com',
    // MC
    'minecraft*.*',
    // 谷歌
    'google*.com',
    'gstatic.com',
    'gmail.com',
    // github
    'github*.*',
    'githubusercontent.com',
    // steam
    'steam*.com',
];

/*
 * 检查是否代理方法
 */
function FindProxyForURL(url, host) {
    // 依次判断域名列表是否命中, 命中则使用代理, 否则直连
    for(let item of rules){
        // 客户端自带函数, 用于判断请求域
        if(shExpMatch(host, item) || shExpMatch(host, '*.' + item)){
            // 使用第一行的代理连接
            return 'PROXY ' + proxy;
        }
    }
    // 直连
    return 'DIRECT';
}

部署pac.js

  1. 新建一个.js文件并将以上代码存入其中
  2. 放入一个局域网内所有设备都能访问到的设备内
  3. 创建一个http服务, 确保通过http连接能访问到该pac.js
  4. 建议直接使用http://ip:端口/pac.js访问, 使用自定义hosts可能会导致延迟或其他意外

windows连接示例

pac.js_windows使用

ios连接示例

pac.js_ios使用.png