系统代理错误主要有两类:开了代理但浏览器不走代理,通常是系统代理被其他软件覆盖或被浏览器插件接管;关掉代理软件后无法上网,则是客户端异常退出后没有清除系统代理,系统仍指向 127.0.0.1:7890 这类已不存在的端口。最快的办法是打开系统的代理设置页,手动关闭或修正代理项。
问题表现
情况 A:代理不生效
- 客户端已开启「系统代理」,但浏览器访问外网仍然失败;
- IP 查询网站显示的仍是本地 IP,客户端连接页看不到浏览器的连接。
情况 B:关闭后无法上网
- 退出代理软件或电脑重启后,浏览器提示「无法连接到代理服务器」,错误码
ERR_PROXY_CONNECTION_FAILED; - 微信等不读取系统代理的软件正常,只有浏览器打不开网页。
可能原因与对应处理
| 原因 | 对应情况 | 处理方法 |
|---|---|---|
| 客户端崩溃或直接关机,没恢复系统代理 | B | 手动关闭系统代理 |
| 多个代理软件互相覆盖设置 | A / B | 只保留一个客户端 |
| 浏览器插件(如 SwitchyOmega)优先级更高 | A | 插件切换到「系统代理」 |
| 客户端改了端口,系统代理仍是旧端口 | A | 重新开关系统代理 |
| 公司电脑由组策略或 PAC 统一下发 | A / B | 联系单位 IT 部门 |
排查方法
Windows 图形界面:打开「设置 → 网络和 Internet → 代理」,查看「使用代理服务器」是否开启、地址和端口是多少,同时检查「使用设置脚本」里是否有不认识的 PAC 地址。
Windows PowerShell:直接读取当前用户的代理设置。
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select-Object ProxyEnable, ProxyServer, AutoConfigURL
Windows cmd:部分命令行工具和系统服务使用 WinHTTP 代理,单独查看。
netsh winhttp show proxy
macOS 终端:网络服务名称以第一条命令的输出为准,常见为 Wi-Fi 或 Ethernet。
networksetup -listallnetworkservices
networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi
Linux GNOME 桌面:
gsettings get org.gnome.system.proxy mode
env | grep -i _proxy
最后,确认系统代理里的端口上确实有程序在监听,命令见《端口被占用》。
解决步骤
情况 B:清除残留的系统代理
- 最省事的做法:重新打开代理客户端,开启一次系统代理再正常关闭,客户端会自动恢复设置。
- 客户端打不开时,Windows 在「代理」设置页关闭「使用代理服务器」,或在 PowerShell 执行:
Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name ProxyEnable -Value 0
- 如果 WinHTTP 也被设置了代理,用管理员身份打开 cmd 执行
netsh winhttp reset proxy。 - macOS 在代理设置页取消勾选所有代理项,或在终端执行:
networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off
networksetup -setsocksfirewallproxystate Wi-Fi off
- Linux GNOME 执行
gsettings set org.gnome.system.proxy mode 'none';终端里设置过的变量用unset http_proxy https_proxy all_proxy清除。
情况 A:让系统代理生效
- 退出其他代理软件,只保留一个客户端;
- 在客户端中关闭再重新开启「系统代理」;
- 把浏览器插件切换为「使用系统代理」,或在无痕窗口(默认禁用插件)中测试;
- 端口有冲突时,按《端口被占用》修改端口;
- 某些程序始终不读取系统代理(例如部分游戏、命令行工具),改用 TUN 模式接管全部流量;开启失败可参考《TUN 模式开启失败》。
系统代理只对「愿意读取系统代理设置」的程序生效。浏览器通常会读取,但很多命令行工具和游戏不会,这不是故障,详见《系统代理模式详解》。
验证结果
- 关闭代理软件后,浏览器可以正常访问国内网站;
- 开启代理后,IP 查询网站显示节点所在地区;
- 客户端的连接页能看到浏览器发起的连接。
其他方案
系统代理问题属于本地设置问题,一般不需要联系机场客服。公司或学校电脑的代理由管理员统一下发,请联系所在单位 IT 部门,不要自行修改。若系统代理正常、流量也进了客户端但仍打不开网页,参见《节点延迟正常但打不开网页》。如果客户端本身打不开,先看《代理客户端无法启动》。
常见问题
为什么关掉代理软件后电脑就上不了网?
客户端异常退出时没来得及把系统代理改回去,浏览器仍把请求发给本地一个已经没人监听的端口。按上面的情况 B 手动关闭系统代理即可恢复。
系统代理开着,命令行里的 git、npm 为什么还是连不上?
大多数命令行工具不读取系统代理,需要单独设置环境变量,例如 macOS / Linux 执行 export https_proxy=http://127.0.0.1:7890,或者直接改用 TUN 模式。
浏览器装了 SwitchyOmega,要不要开系统代理?
插件会接管浏览器的代理设置,两者同时存在时以插件为准。只想让浏览器走代理时,可以保留插件、端口填客户端的混合端口;否则把插件切到「系统代理」,避免设置互相打架。
系统代理和 TUN 模式能同时开吗?
可以,多数客户端允许同时开启,此时读取系统代理的程序走代理端口,其他程序被 TUN 接管。但没有必要时只开一个更容易排查问题。