跳到正文

载入日 2026 年 10 月 23 日34 家 · 自家客户端 8 家 · 给订阅链接 6 家合作说明

一翻云¥20/月码 1FLYYUN新标签打开

接进浏览器 · 10 月 24 日写 · 10 月 24 日改

PAC:自动代理配置脚本,怎么来、怎么写、填在哪

一行摘要PAC 不是代理,是一张写成脚本的判断表:浏览器拿着网址问它,它答「走 127.0.0.1 加某个端口」或者「直连」。端口后面要有本机客户端在跑。客户端生成的 PAC 地址直接填,自己写的只要一个函数、十行以内;填的位置决定它管全机还是只管一个浏览器。

PAC 是什么

PAC 的全称是代理自动配置,本质是一个 JavaScript 文件,里面只需要一个函数:

function FindProxyForURL(url, host) { ... }

浏览器每发一个请求,就把网址和主机名交给这个函数,函数返回一个字符串:"PROXY 127.0.0.1:7890" 表示交给这个地址和端口,"DIRECT" 表示直连。就这么多。

它和系统代理页里手动填的那一格相比,差别只有一个:手动那格是「全走」,PAC 是「按网址判断走不走」。它自己不连网,不提供线路,返回的那个端口后面得有本机客户端在跑,否则就是一个空口。

客户端生成的 PAC 地址

不少本机客户端有一个「PAC 模式」,或者在设置页里给出一条本机地址,形如 http://127.0.0.1:端口/pac 这类,具体几号、路径叫什么,以客户端自己的设置页为准,别照别处抄。

它生成的脚本一般是两部分:一张域名清单(常见的是按公开的清单生成),加一句「清单里的交给它自己的端口,其余直连」。你不用看内容,把地址填进后面说的位置就行。

客户端换了端口、换了模式,这个地址可能跟着变;填好之后客户端那边再改设置,记得回来对一遍。

自己写一个十行以内的 PAC

只想让几个域名走端口、其余全部直连,自己写比用清单更干净:

function FindProxyForURL(url, host) {
  if (dnsDomainIs(host, ".example.com") ||
      shExpMatch(host, "*.example.org")) {
    return "PROXY 127.0.0.1:7890; DIRECT";
  }
  return "DIRECT";
}

逐行说:

  • dnsDomainIs(host, ".example.com"):主机名以这个后缀结尾就命中,example.com 本身和它下面的全部子域名一起算。
  • shExpMatch(host, "*.example.org"):通配符写法,* 匹配任意字符。两种写法挑顺手的,一行加一个域名。
  • "PROXY 127.0.0.1:7890; DIRECT":先试代理,连不上就直连。要走 SOCKS 端口写成 "SOCKS5 127.0.0.1:7891"。端口按客户端设置页上的数字填,本机端口那条词条讲了常见的几个。
  • 最后一个 return "DIRECT" 是兜底:清单外的全部直连。

存成 proxy.pac,编码用 UTF-8,别用 Word 一类会加格式的软件编辑。改了之后,浏览器要重新加载才会读到新内容,后面每个位置各有刷新办法。

浏览器和系统各在哪填

位置 入口 管谁
Windows 11 设置 → 网络和 Internet → 代理 → 「使用设置脚本」→ 设置 → 填「脚本地址」 所有读系统代理的软件
macOS 14 及之后 系统设置 → 网络 → 正在用的网络 → 详细信息 → 代理 → 「自动代理配置」→ 填 URL 同上,按网络服务各存一份
Chrome / Edge 没有自己的入口,跟系统;或者启动参数 --proxy-pac-url= 跟系统时全机,带参数时只管那一份
Firefox 设置 → 常规 → 网络设置 → 「自动代理配置的 URL」 只有 Firefox
切换器 新建「PAC 情景模式」,填地址或直接贴脚本 装了它的那个浏览器

填地址时有一个坑:本地文件。Firefox 认 file:///D:/proxy.pac 这种写法;Windows 代理页和 macOS 的脚本栏对本地路径的支持时好时坏,稳妥的做法是用切换器的 PAC 情景模式把脚本整段贴进去,或者用客户端生成的那条 http 地址。Chrome 和 Edge 的入口在代理设置这一栏按系统各写了一篇,Firefox 那页的三种选法见 Firefox 那一篇。

填在系统这一层,管的是整台机器,不算「只让浏览器走」;要只管一个浏览器,用 Firefox、切换器或启动参数那三个位置,只让浏览器走那一篇比过三条路的代价。

PAC、切换器规则、客户端规则是三层

从浏览器往外数:

  1. 切换器的「自动切换」规则,本质也是它替你生成的一段 PAC。
  2. 你自己填的 PAC。
  3. 客户端里的规则模式。

同一个请求最多经过这三道判断,哪一道说「直连」,后面的就看不到它。三层各写一套、互相矛盾,表现是该走的没走。常见搭法是只留一层:浏览器这边用 PAC 分,客户端开全局;或者 PAC 不用,浏览器全交给端口,客户端自己分。分流这条词条讲两层怎么配合。

还有一件事和 PAC 无关但常被当成 PAC 的问题:浏览器开着安全 DNS 时,域名解析绕过客户端,按域名写的规则会对不上,安全 DNS 那一篇单独讲。

三个常见坑

  • 返回值拼错。PROXY 和 DIRECT 都是大写,中间一个空格,地址和端口之间是英文冒号。写错了浏览器不报错,只是全部直连。
  • 缓存。改完脚本没反应,多半是旧的还在用,按上表各自的办法刷新一次。
  • 填的端口和客户端不一致。客户端改了端口,PAC 里还是旧数字,所有命中的网址都打不开,表现和客户端没开一样。

34 家里谁的订阅这样接省事

PAC 里写的是端口,端口来自把订阅导进通用客户端。书签栏这 34 家里,官网写明了能导进通用客户端、面板里就能复制订阅,或者协议本身是通用客户端都认的那几种,这条路走得顺:

  • 跨界云:订阅登录面板就能复制,官网写了 v2rayN、Clash 系、Shadowrocket 都能导;码 kuajie 老账号新账号都按 8 折,跨界年付版除外。
  • 微风:面板里能复制,协议 VLESS,挑一个认它的客户端导进去就有端口。
  • U1S1:协议 Shadowsocks,官网列了 Windows、Mac、安卓、iOS 四个系统,台数不限,订阅给法没见到写法,登录面板看。
  • 闪跃:官网写了订阅能导通用客户端,也有自家客户端,线路写的是 IPLC;码 shanyue 任何档位都按 8 折。
  • 一翻云:2026 年 4 月新开,订阅能导进通用客户端这一点机场方确认过,链接得找客服发;台数不限,协议 VLESS。按月能买,贴码 1FLYYUN 新开的账号 9 折。

拿到订阅、导进客户端、看一眼端口号,PAC 里那一行 127.0.0.1:7890 换成你的数字就通了。第一次买先按月,一翻云是书签栏第 1 个,第一笔最少的就是月付那一档。

这篇里点名的机场

书签 1

一翻云

固定标签

自家客户端四个系统都有,订阅能导第三方,不限台数

接入
两条路都行
月付起
¥20/月每月 150GB
优惠码
1FLYYUN
书签 29

U1S1

官网列了四个系统,SS 协议、IEPL,不限台数,¥20 起

接入
没见到写法
月付起
¥20/月每月 120GB
优惠码
U1S1888
书签 6

闪跃

自家客户端开系统代理即可,也接通用客户端,8 折码

接入
两条路都行
月付起
¥24/月每月 150GB
优惠码
shanyue
书签 4

微风

没有码,订阅面板里能复制,VLESS,有机场那边测的测速

接入
本机客户端
月付起
¥27/月每月 200GB
优惠码
没有码

地址栏里常搜的

PAC 里的 PROXY 和 SOCKS5 两种写法怎么选
看客户端开的是哪种端口。PROXY 后面接的是 HTTP 代理端口,Clash 系的混合端口用它就行;SOCKS5 接的是 SOCKS 端口,v2rayN 的 10808 这类。两种可以用分号连写成备选,前一个连不上就试后一个,末尾再放一个 DIRECT 当兜底。
PAC 文件改了为什么浏览器没反应
浏览器和系统都会缓存 PAC。Windows 代理页把「使用设置脚本」关掉再打开一次,Firefox 在连接设置窗口里点 PAC 地址旁边的重新加载按钮,Chrome 和 Edge 跟系统,系统那边刷新后重启浏览器。脚本里有语法错误时也是这种表现,先用浏览器直接打开那个文件看一眼。
PAC 能不能直接填机场的订阅链接
不能。订阅链接指向的是一段线路参数,PAC 要的是一个会返回 PROXY 或 DIRECT 的脚本,两者格式不同,填进去浏览器会当脚本解析失败,所有请求直连。订阅先导进本机客户端,PAC 里写客户端的端口。
客户端里的 PAC 模式和系统代理模式有什么区别
系统代理模式是把 127.0.0.1 加端口写进系统代理页,所有请求都交给客户端,分流由客户端做。PAC 模式是把一个 PAC 地址写进系统代理页的脚本栏,浏览器先按脚本判断,清单外的网址根本不经过客户端。前者分流在客户端,后者分流在浏览器这一层。