1.
什么是PAC文件与适用场景
概述:PAC(Proxy Auto-Config)是一个JavaScript脚本,用于根据请求的URL或主机动态返回代理策略。主要用于按域名、IP或路径决定是走代理(PROXY host:port)还是直连(DIRECT)。适合企业分流、按域代理或按需绕过。
2.
PAC文件基本结构与语法
示例:必须实现函数 FindProxyForURL(url, host) { /* 返回字符串 */ }。常用返回值:"DIRECT"、"PROXY host:port"、"SOCKS5 host:port"。常用内建函数:shExpMatch(), dnsDomainIs(), isInNet(), myIpAddress(), weekdayRange()。务必以UTF-8保存,文件扩展名一般为 .pac 或 .js。
3.
常用规则模板与写法示例
示例代码片段:function FindProxyForURL(url, host) { if (shExpMatch(host, "*.local") || shExpMatch(host, "192.168.*")) return "DIRECT"; if (dnsDomainIs(host, "example.com")) return "PROXY proxy.example.com:8080"; return "DIRECT"; }。要点:把常直连的本地/局域网地址放前面,避免不必要走代理。
4.
如何生成大量规则(自动化)
方法:如果有域名列表(比如ACL或gfwlist),可用脚本转换为 PAC 规则。常见流程:准备域名白/黑名单(每行域名),用 Python/Node.js 脚本读取并输出 shExpMatch 条目,合并到模板的 if 语句块。示例工具:gfwlist2pac、自写 Node 脚本配合正则清洗。
5.
托管PAC文件以供iOS使用(推荐GitHub Pages)
步骤:1) 新建 GitHub 仓库并上传 your.pac 文件。2) 在仓库 Settings 启用 GitHub Pages(选择 main 分支 /root)。3) 获取生成的 https://username.github.io/repo/your.pac 链接。注意:必须是 HTTPS,iOS 在“自动”代理配置中通常要求可访问的 URL。
6.
在iOS上配置使用PAC文件(Wi‑Fi)
操作步骤:设置->Wi‑Fi->点当前网络信息图标(i)->配置代理->选择“自动”->在“URL”栏粘贴 PAC 文件的 HTTPS 链接->保存。测试:在 Safari 打开一个受规则影响的域名,观察是否走代理(可在代理端日志查看访问来源)。iOS 对不同 Wi‑Fi 配置独立保存。
7.
处理iOS缓存与立即生效技巧
说明:iOS 会缓存 PAC 文件,更新后不一定立即生效。技巧:1) 在 PAC URL 后加版本号 ?v=20260921(更改参数强制重新下载)。2) 在 Wi‑Fi 中切换代理模式(自动->手动->自动)可触发刷新。3) 重启设备或断开重连 Wi‑Fi 作为最后手段。
8.
安全与Content-Type设置要求
要点:服务器返回 Content-Type 建议为 application/x-ns-proxy-autoconfig 或 text/javascript。使用 HTTPS 并确保证书有效,避免 iOS 拒绝加载。不要在 PAC 中包含敏感凭证或跨站脚本调用。
9.
调试与排错方法
步骤:1) 在浏览器中打开 PAC URL 确保能看到脚本。2) 用 curl -I 查看返回头部与 Content-Type。3) 在本地使用 Node 或在线 PAC 解析器测试 FindProxyForURL('http://域名','域名') 的返回。4) 检查语法错误(浏览器控制台会报错),语法错误会导致 iOS 忽略整个脚本。
10.
管理策略与版本控制建议
实操:把 PAC 文件纳入版本控制(Git),使用明确定义的注释与变更日志。对规则做模块化管理:把大名单存为数组并通过循环生成条件,便于自动化更新。发布新版本时同时更新 URL 参数(?v=)并记录变更说明。
11.
进阶:按时间或地理条件切换规则
说明:PAC 支持 weekdayRange、dateRange 等函数,可实现工作时间走直连,非工作时间走代理。但 iOS 的 JS 环境有限,建议仅用于简单时间条件,复杂策略可考虑配合服务器端生成不同版本的 PAC。
12.
iOS 限制与替代方案说明
提示:iOS 的 PAC 仅对配置了该 Wi‑Fi 的流量生效,不适用于蜂窝网络。若需全系统代理或在蜂窝网络下生效,考虑使用自建 VPN/Proxy 应用或配置设备级 VPN 并在服务器端实现路由规则。
13.
常见错误示例与修正
错误:忘记 return、语法错误或使用不支持的 JS API。修正方法:使用最小可运行模板逐步添加规则;用在线 PAC 测试工具逐条验证规则生效;确保字符串返回格式正确,例如 "PROXY 1.2.3.4:8080"。
14.
性能与大小优化建议
建议:减少 if 嵌套,优先匹配常用域名,使用正则或数组循环替代大量重复代码;将常量域名合并为通配符表达式(如 *.example.com),避免过长的脚本导致解析或下载延迟。
15.
备份与应急恢复策略
操作:保持多个托管点(如 GitHub Pages + 自有服务器),在 PAC URL 使用主/备切换逻辑或使用 DNS 将域名切到备份服务器;重要变更先在小范围内测试再全网发布。
16.
问:iOS 必须使用 HTTPS 的 PAC 链接吗?
答:强烈建议使用 HTTPS,部分 iOS 版本或网络环境会拒绝不安全的 HTTP 自动代理 URL;使用 HTTPS 可避免证书/中间人问题,并提高加载成功率。
17.
问:更新 PAC 后如何确保 iOS 立即生效?
答:在 URL 后添加版本号参数(如 ?v=timestamp)可强制重新下载;切换 Wi‑Fi 配置中的代理模式或断开重连 Wi‑Fi 也能触发刷新,必要时重启设备。
18.
问:如何验证某个域名是否按 PAC 规则走代理?
答:在代理服务器查看访问日志是最直接的方法;也可在本地浏览器调用 FindProxyForURL 测试,或临时把 PAC URL 指向一个简化脚本返回固定策略以便观察行为。
来源:如何生成与管理用于ios设置pac代理服务器的规则脚本