PAC文件里的DIRECT和PROXY怎么匹配?规则顺序写错会怎样

PAC是程序逻辑,第一条命中规则往往决定路径
发布于 更新于
6

PAC(Proxy Auto-Config)不是简单的域名白名单,而是一段由客户端调用的JavaScript函数。浏览器把当前URL和主机名传给 FindProxyForURL(url, host),函数返回 DIRECTPROXY host:portSOCKS... 或多个备用项,决定这次请求直连还是通过哪个代理。

规则顺序非常重要:函数遇到第一个执行的 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变慢

dnsResolveisInNet 等函数可能触发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辅助,但同一页面走代理不代表所有域名都命中相同规则。

企业PAC需要哪些管理措施

配置应版本化、代码评审、语法测试和分阶段发布;记录负责人、变更原因、发布时间和回滚版本。PAC URL使用HTTPS并限制修改权限,避免未经授权的脚本改变全体用户流量。

受管设备上的PAC属于组织安全配置,用户不要自行绕过。需要其他代理和网络工具时,可从极跃圈网址导航选择。最终验收应基于逐条用例与实际命中日志,而不是只确认PAC文件能下载。

常见问题(FAQ)

DIRECT是什么意思?
表示该请求不使用PAC指定代理,直接按本地网络连接。
PAC可以按完整URL分流吗?
函数能接收URL和host,但现代浏览器可能出于隐私限制传递内容,具体看实现。
规则修改后为什么没生效?
浏览器或系统可能缓存PAC,需要重新加载并确认URL可达。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600