mac上需用no_proxy环境变量绕过局域网ip代理,因系统设置“忽略主机与域”不支持ip和cidr;应设为export no_proxy="localhost,127.0.0.1,192.168.1.100,10.0.1.5,.local"并写入~/.zshrc。
mac 上让特定局域网 ip(比如 192.168.1.100、10.0.1.5 或整个 192.168.0.0/16 段)不走代理,关键在于绕过系统代理设置的局限性——图形界面里的“忽略主机与域”对 ip 地址支持极弱,真正可靠的是环境变量 no_proxy。
为什么系统设置里的“忽略”对 IP 无效
在「系统设置 → 网络 → 代理」中填写的“忽略这些主机与域”,只接受域名格式(如 example.com、*.test),不识别纯 IP 地址,也不支持 CIDR 网段写法(如 192.168.0.0/16)。即使你填了 192.168.1.100,它也不会生效;该字段最终写入系统配置文件,但仅被 Safari、Mail 等少数 Apple 应用读取,终端工具完全无视。
用 no_proxy 环境变量精准绕过局域网 IP
no_proxy 是所有标准 CLI 工具(curl、wget、git、npm、docker、python-requests 等)默认遵循的绕过机制,支持 IP 地址和点号前缀匹配,且大小写不敏感、逗号分隔、无空格。
- 临时生效(当前终端):
export no_proxy="localhost,127.0.0.1,192.168.1.100,10.0.1.5,.local" - 永久生效(推荐):
编辑 ~/.zshrc:
echo 'export no_proxy="localhost,127.0.0.1,192.168.1.100,10.0.1.5,.local"' >> ~/.zshrc && source ~/.zshrc - 若需绕过整段私有网络,可逐个列出常用网关段:
export no_proxy="localhost,127.0.0.1,10.0.0.0,172.16.0.0,192.168.0.0,.local"(注意:no_proxy 不支持 /16 语法,只能写起始 IP;实际使用中,只要覆盖常见网关地址,绝大多数内网服务就已绕过)
验证是否真正生效
执行命令观察实际连接行为:
- 运行 curl -v http://192.168.1.100/api/test,查看输出里是否有 Connected to 192.168.1.100 且无 Proxy-Connection 字段;
- 对比测试:访问一个被代理的外网地址(如 curl -v https://httpbin.org/ip),确认响应头含 Via: xxx-proxy,说明代理本身仍在工作;
- 检查当前环境:env | grep -i proxy,确认 no_proxy 值已正确加载。
绕过失败?排查这三个常见干扰点
- Git 单独配置优先级更高:运行 git config --global http.proxy,如果返回非空值,它会强制走代理并忽略 no_proxy;清空用 git config --global --unset http.proxy;
- 某些 CLI 工具内置代理开关:比如 aws-cli 的 aws configure set proxy.http、Docker Desktop 的 GUI 代理设置,它们会覆盖环境变量;
- 公司 MDM 强制策略:如果设备受 Jamf 或 Intune 管理,可能通过配置描述文件锁死代理行为;运行 profiles status -type enrollment 查看是否受管,此类情况下 no_proxy 通常失效。










