零依赖,启动即用

轻量级 PAC 自动代理服务

内网 IP 直连,其他流量走 127.0.0.1:7890
纯 Python 标准库实现,零依赖,启动即用。

PAC 地址
本机
http://127.0.0.1:10390
局域网
http://<本机IP>:10390

核心特性

简单、高效、可靠的 PAC 代理解决方案

零依赖

纯 Python 标准库实现,无需安装任何第三方包,启动即用。

智能代理

白名单制规则,默认走代理,内网直连。智能判断客户端来源,自动选择最佳代理地址。

热更新

修改 proxy.pac 规则文件后无需重启,每次请求自动重新读取,即时生效。

白名单安全

采用白名单制设计,不依赖 dnsResolve 反查,避免 DNS 污染导致的误判。

Docker 支持

提供完整的 Docker 和 Docker Compose 配置,一键部署,支持容器化环境。

日志管理

按天滚动日志,自动清理过期文件,默认保留 7 天,避免磁盘占用过多。

工作原理

基于 PAC 规则的智能代理分流

1

客户端请求 PAC

浏览器或系统向 mypac 服务请求 PAC 文件

2

智能路由决策

根据域名/IP 规则判断:内网直连,外网代理

3

返回代理策略

返回 DIRECT 或 PROXY 指令,客户端据此连接

4

智能代理地址

本机访问返回 127.0.0.1,局域网访问返回配置的地址

// 代理规则示例
if (/localhost|^127\./.test(host)) return 'DIRECT';
if (/\.local$|\.lan$/.test(host)) return 'DIRECT';
if (isPlainHostName(host)) return 'DIRECT';
// 内网 IP 直连
if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0")) return 'DIRECT';
// 其他所有走代理
return 'PROXY {{PROXY_TARGET}}';

快速开始

两条命令即可启动服务

终端
cd /Users/samge/PRO/other/mypac
python3 server.py

客户端配置

macOS 系统(全局)

  1. 系统设置 → 网络 → Wi-Fi → 详细信息 → 代理
  2. 勾选 自动代理配置 (PAC)
  3. URL 填:http://127.0.0.1:10390

ClashX / Surge 等客户端

在「外部资源 / PAC」中填入上面的 URL

配置选项

通过 .env 文件自定义设置

变量 说明 默认值
PAC_PORT PAC 服务监听端口 10390
PROXY_TARGET 上游代理地址 127.0.0.1:7890
LOG_RETAIN_DAYS 日志保留天数 7

⚠️ 注意:请确保代理软件已开启「允许局域网连接」,否则局域网设备无法连接代理地址。

常见问题

修改了 PAC 后客户端不生效?

为什么修改 PAC 规则后客户端不生效?

浏览器/操作系统会缓存 PAC 脚本(通常 30 分钟以上)。即使服务端已更新,客户端仍可能使用旧的缓存规则。

服务端已通过 Cache-Control: no-cache 尽力阻止缓存,但部分系统/浏览器仍会固执缓存,此时需手动按以下方法刷新:

Windows 如何刷新 PAC 缓存?
  1. 打开 设置 → 网络和 Internet → 代理
  2. 找到「自动检测代理配置」(或「使用设置脚本」)
  3. 关闭开关 → 等待 2 秒 → 重新打开
  4. 重启浏览器

⚠️ netsh winhttp reset proxy 只重置 WinHTTP 层,无法清除浏览器/系统代理的 PAC 缓存。

macOS 如何刷新 PAC 缓存?
  1. 系统设置 → 网络 → Wi-Fi → 详细信息 → 代理
  2. 取消勾选「自动代理配置」→ 确定
  3. 再次进入,重新勾选并填入 PAC URL → 确定
  4. 重启浏览器
Linux (GNOME) 如何刷新?
  1. 设置 → 网络 → 网络代理
  2. 将模式从「自动」切换为「」→ 应用
  3. 再切回「自动」,重新填入 PAC URL → 应用
  4. 重启浏览器
浏览器插件如何刷新?

在插件设置中(如 SwitchyOmega):

  • 切到「直接连接」→ 切回「auto switch
  • 或直接禁用再启用插件

Docker 部署

一键启动,开箱即用

Docker Compose

# 1. 创建配置
cp .env.example .env
# 2. 构建并启动
docker compose up -d
# 3. 查看日志
docker compose logs -f

单条命令运行

docker run -d \
--name mypac \
--restart unless-stopped \
-p 10390:10390 \
-e PROXY_TARGET=<IP>:7890 \
-e PAC_PORT=10390 \
mypac