### [PAC文件里的DIRECT和PROXY怎么匹配?规则顺序写错会怎样](https://www.jiyueip.com/article/7151) **Published:** 2026-07-21T03:46:54 **Author:** 斑斓助理 **Excerpt:** PAC文件通过FindProxyForURL返回DIRECT、PROXY或SOCKS等策略,规则顺序和默认返回决定哪些域名直连或代理。 PAC(Proxy Auto-Config)不是简单的域名白名单,而是一段由客户端调用的JavaScript函数。浏览器把当前URL和主机名传给 `FindProxyForURL(url, host)`,函数返回 `DIRECT`、`PROXY host:port`、`SOCKS...` 或多个备用项,决定这次请求直连还是通过哪个代理。 规则顺序非常重要:函数遇到第一个执行的 `return` 就结束。宽泛规则写在前面,后面的精确例外可能永远没有机会执行。 ## 一个最小PAC示例 ``` function FindProxyForURL(url, host) { if (isPlainHostName(host)) { return "DIRECT"; } if (dnsDomainIs(host, ".example.com")) { return "DIRECT"; } return "PROXY proxy.example.net:8080; DIRECT"; } ``` 这个示例让无点的本地主机名和 `example.com` 子域直连,其他请求先尝试代理,代理失败后允许直连。示例地址仅用于说明,真实策略应由网络管理员评估。 ## DIRECT、PROXY和备用列表怎么读 | 返回值 | 含义 | 风险边界 | | --- | --- | --- | | `DIRECT` | 客户端直接连接目标 | 会使用本地出口,不经过代理审计 | | `PROXY host:port` | 使用指定HTTP代理 | 协议与认证必须匹配 | | `SOCKS5 host:port` | 在支持的客户端中使用SOCKS5 | DNS与UDP行为因实现而异 | | `PROXY A; PROXY B; DIRECT` | 按顺序尝试备用方案 | 允许DIRECT意味着代理故障时可能绕过 | 企业环境如果要求所有公网流量必须经过安全代理,不应随意在末尾添加DIRECT回退。否则节点故障时,流量可能直接出网,绕过组织控制。 ## 为什么规则顺序会写错 例如先写“所有 `.example.com` 走代理”,后写“`internal.example.com` 直连”,前一条已经命中并返回,内部域名例外无效。应把更具体的例外放在更宽泛规则之前,并用测试表验证。 但“具体规则在前”不是唯一原则。还要考虑URL路径、端口、IP网段、本地主机、DNS解析和默认策略,PAC应保持短小、可读和可回滚。 ## host匹配的常见误区 - `dnsDomainIs(host, ".example.com")` 与根域 `example.com` 的匹配行为需要单独测试; - 字符串包含判断可能把 `notexample.com` 错当目标域名; - host通常不包含协议、端口和路径,URL判断要使用传入的url; - 国际化域名在底层可能使用Punycode,应确认客户端传入形式; - IPv6字面量和内网短名称需要专门测试; - 大小写和尾随点等边界不应凭感觉处理。 ## DNS函数为什么会让PAC变慢 `dnsResolve`、`isInNet` 等函数可能触发DNS查询。复杂PAC对每个请求反复解析,会增加延迟,离线或DNS故障时还可能阻塞。浏览器也可能对PAC求值和DNS结果做缓存。 能用主机名字符串判断时,不必无条件做DNS解析;需要网段判断时,应评估IPv4/IPv6、缓存和失败回退。 ## PAC文件为什么修改后不立即生效 - 浏览器或系统缓存了PAC脚本; - PAC URL经过CDN或HTTP缓存,仍返回旧版本; - 企业策略强制了另一条PAC URL; - 文件语法错误,客户端回退到旧配置或直连; - 访问PAC本身需要代理,形成启动依赖; - 扩展或VPN覆盖了系统PAC选择。 为PAC响应设置合适的缓存和版本标识,发布后从实际客户端重新加载。不要把凭据写在PAC中,PAC内容可能被用户和中间缓存读取。 ## 上线前准备三类以上测试 | 测试类型 | 示例目标 | 预期 | | --- | --- | --- | | 明确直连 | 内网、localhost或批准域名 | DIRECT | | 明确代理 | 普通公网业务域名 | 指定PROXY | | 精确例外 | 宽泛域名下的特殊子域 | 验证顺序是否正确 | | 未匹配默认 | 随机批准测试域名 | 符合默认安全策略 | | 代理故障 | 受控停用测试节点 | 按设计切备用或阻断 | | IPv4/IPv6 | 双栈目标 | 不因解析类型意外绕过 | 测试时通过浏览器网络日志、代理日志和自有服务器请求记录确认实际路径。IP查询可用[IP111](https://www.jiyueip.com/link/5626)辅助,但同一页面走代理不代表所有域名都命中相同规则。 ## 企业PAC需要哪些管理措施 配置应版本化、代码评审、语法测试和分阶段发布;记录负责人、变更原因、发布时间和回滚版本。PAC URL使用HTTPS并限制修改权限,避免未经授权的脚本改变全体用户流量。 受管设备上的PAC属于组织安全配置,用户不要自行绕过。需要其他代理和网络工具时,可从[极跃圈网址导航](https://www.jiyueip.com/hao)选择。最终验收应基于逐条用例与实际命中日志,而不是只确认PAC文件能下载。 **Tags:** HTTP代理, PAC代理, 浏览器代理, 网络故障排查 **Categories:** 行业洞察 ---