手账正文

PAC 自动代理不生效怎么办?脚本下载、DIRECT 与入口排查

设置了 PAC 自动代理,网页仍走直连或提示连接失败,先分开查三件事:软件有没有取得并执行脚本、目标请求得到什么代理结果,以及结果里的代理入口能不能连接。PAC 地址能在浏览器里打开,只证明那次页面访问成功,不代表自动配置已经生效。

作者:小六|资料核对日期:2026年10月12日。本文以桌面浏览器使用明确 PAC 地址为例,Chrome 特有行为会单独说明;其他应用和浏览器应按各自实现核对。

一、PAC 是选路脚本,不是机场订阅

PAC 使用 JavaScript 函数 FindProxyForURL(url, host),根据请求返回代理选择。它与机场订阅中的节点配置、本机 HTTP 代理地址,各有用途。把订阅地址填进自动脚本栏,不会因为都能下载文本就变成有效 PAC。

常见结果含义如下,格式见 MDN 的 PAC 文档:

脚本返回的内容 对应选择
DIRECT 这次代理选择要求直连
PROXY 主机:端口 使用对应的代理入口
多项以分号分隔 提供多个候选,需结合软件的回退行为理解

因此,“某个目标走直连”可能正是规则结果。先写清自己的预期,再查实际匹配,而不是把所有 DIRECT 都算成脚本错误。

二、先查软件实际获取了哪个文件

确认当前有效设置指向预期 PAC 地址,并核对是否有旧配置或浏览器扩展另行控制代理。设置来源不清时,可先参考本站Chrome 代理设置来源排查。这一步确认的是谁提供配置,不需要重复安装扩展。

然后检查下载状态及返回内容:是否真的取得脚本,还是登录页、错误页或另一种配置。扩展名为 .pac 也不能代替内容检查。需要登录后才能看的页面,与后台自动获取脚本,可能有不同的访问条件。

Chromium 的代理实现说明指出,Chrome 的 PAC 下载由网络栈发起、不经过代理,并要求 HTTP 状态为 200;其下载行为与普通页面请求不同。如果脚本所在地址只有经过代理才能到达,不能假定浏览器会先使用这份尚未取得的脚本去下载它。

这也说明:手动打开地址成功和自动获取成功,需要分别核对。不要把完整私人脚本地址交给陌生在线检测站,先在本机确认错误阶段。

三、下载成功后,检查目标实际得到的结果

脚本取得后,还要看函数能否执行、目标命中了哪一分支,以及最后返回的主机和端口。优先选一个受影响目标,记录域名、时间和预期选择,不需要一口气测试几十个网站。

如果自己维护脚本,可以在本机核对相应条件和默认返回项。host 与完整网页地址不是一回事;规则按域名匹配,就不要把整串 URL 当作域名填入。脚本运行出错与正常返回 DIRECT,要保留不同结论。

Chrome 会对传给 PAC 的 URL 做处理,HTTPS 请求的路径等部分会被去掉。Chromium 文档提醒,不应依赖 URL 路径和查询内容设计可移植规则。按某个网页子路径写的条件没有命中时,先检查实际传入信息,不急着判断节点不能用。

四、看清 DIRECT 候选与脚本失败的区别

例如返回串包含 PROXY 127.0.0.1:7890; DIRECT,它不仅列出一个代理,还列出了直连候选。这里仅演示格式,地址和端口须按实际环境核对。

回退不等于“任何网页错误都会换出口”。Chrome 的回退还受连接错误类型及此前代理响应情况影响。因此,遇到出口变化,要查看候选和相关记录,不能只看脚本第一项;也不要直接把 DIRECT 删除后就声称问题已解决。

获取 PAC 失败又是另一种情况,软件可能采用其他配置、直连或报错,取决于设置与平台。记录实际结果比猜测更有用,不能把“脚本没加载”与“脚本明确选择直连”混成一个现象。

五、选中了代理,再确认入口可用

核对返回的协议、主机和端口与当前客户端一致。旧客户端退出、端口改变或入口认证不匹配,都可能让正确的 PAC 规则无法完成连接。换一份脚本不一定能修复已经失效的入口。

如果规则指向本机,127.0.0.1 是运行该应用的设备自身;不能把电脑上的写法原样拿给另一台设备使用。已经确认请求进入客户端后,再查看实际规则和节点,避免用一次出口查询代表所有应用。

PAC 的 DIRECT 也只是该应用的代理选择。如果系统还使用 TUN 等接管方式,后续路径仍需结合客户端记录判断,不能据此承诺最终没有经过节点。

六、更新后,确认软件重新加载了内容

浏览器可能保留已取得的 PAC 内容,刷新普通网页不等于重新下载脚本。按所用软件的说明重新应用配置,再发起同一个目标的新请求;把更新时间与测试时间记下来,不必为了“看到变化”反复重置全部网络设置。

如果仍不符合预期,可以保留一份简短对照:相同目标,旧脚本与新脚本各得到什么结果,入口是否运行,以及是否有执行错误。求助只提供必要的脱敏片段,不公开完整访问记录。

常见问题:浏览器能用 PAC,curl 为什么不行?

curl 官方 FAQ 明确说明,它没有内置 JavaScript/PAC 执行支持,见 curl 的 PAC 说明。把 PAC 下载下来,不等于 curl 会按里面的逻辑选择代理;也不能把 PAC 文件网址当成普通代理服务器地址。

应按目标工具支持的方式设置明确代理,或使用经过核对的应用方案。相关入口检查可参考本站curl 代理设置排查。

欢迎带着应用名称、PAC 获取或执行阶段、目标域名及脱敏后的结果交流,不需要发送完整订阅或私人脚本地址:Telegram 联系我。

评论

搜索文章

正在加载搜索…