系统代理不生效:客户端已开启但浏览器仍然直连的排查
客户端显示系统代理已开启,浏览器却仍然直连,常见原因是多个代理软件互相覆盖、浏览器扩展接管、程序不遵循系统代理或注册表残留。本文给出 Windows 下的定位与修复方法。
- 浏览器仍然直连,访问不到境外网站
- 浏览器正常,但命令行或个别软件不走代理
- 重启后系统代理被自动关闭
问题描述
客户端已开启系统代理,但浏览器或其它程序的流量没有经过代理客户端。
可能原因
- 可能性 · 高
多个代理客户端互相覆盖
后启动或后切换的客户端会改写系统代理端口,前一个客户端界面显示“已开启”但实际无效。
- 可能性 · 中
浏览器扩展接管代理
SwitchyOmega 等扩展会让浏览器忽略系统代理设置。
- 可能性 · 中
程序不遵循系统代理
命令行工具(git、curl、npm)、部分游戏与 UWP 应用默认不读取系统代理。
- 可能性 · 低
客户端异常退出留下残留
客户端崩溃后系统代理仍指向已关闭的端口,表现为完全无法上网。
检查方法
- CHK-01
查看 Windows 代理设置
打开“设置 → 网络和 Internet → 代理 → 手动设置代理”,记录地址与端口。
- CHK-02
对比客户端端口
在 v2rayN“参数设置”或 Clash Verge Rev“设置”中的端口设置(默认混合端口 7897,以实际界面为准)中查看本地监听端口,两者应一致。
- CHK-03
用命令行验证
在 PowerShell 中通过客户端端口请求测试地址,能返回结果说明客户端本身工作正常。
curl.exe -x http://127.0.0.1:10808 -I https://www.google.com
解决步骤
- 01
只保留一个客户端管理系统代理
在不使用的客户端里关闭“系统代理”或设为“不改变系统代理”,然后在当前客户端重新开启。
- 02
检查浏览器扩展
暂停代理类扩展,或把扩展切换到“系统代理”模式。
- 03
为命令行单独设置代理
在 PowerShell 中执行
$env:HTTP_PROXY="http://127.0.0.1:10808"和$env:HTTPS_PROXY="http://127.0.0.1:10808"(v2rayN 默认 10808,Clash Verge Rev 默认 7897,按实际端口修改),只对当前窗口生效;或在客户端中改用 TUN 模式。 - 04
清除残留设置
如果客户端已退出但仍无法上网,在 Windows 代理设置中关闭“使用代理服务器”。
验证方式
- Windows 代理设置中的端口与当前客户端监听端口一致。
- 客户端的连接 / 日志页面能看到浏览器发起的连接。
系统代理到底是什么
在 Windows 中,“系统代理”只是一项设置:它告诉愿意读取这项设置的程序,“请把网络请求发给 127.0.0.1 的某个端口”。代理客户端正是在这个端口上监听。它不是强制性的,程序可以选择忽略,这就是为什么浏览器能用而命令行不能用。
TUN 模式则不同,它在网络层创建虚拟网卡,所有程序的流量都会经过客户端,因此能覆盖不遵循系统代理的程序,但对权限和兼容性的要求也更高。
参考资料
- v2rayN Wiki · Description of system proxy routing · GitHub Wiki · 访问于 2026.10.24
更新记录
- 补充 Clash Verge Rev 默认端口与 HTTP_PROXY 环境变量。
- 首次发布。