· 故障排查 · 约 10 分钟

开启系统代理后网页仍打不开:浏览器与命令行终端分开排查

浏览器要排查代理扩展、PAC 与绕过列表,终端要查 http_proxy 环境变量和工具自身的代理设置。按两条线定位系统代理不生效的原因。

本文速览

系统代理开启,只说明系统里写入了代理设置,不代表每个应用都会使用它。本文以桌面端 v2rayN 为例,先确认本地监听与显式代理请求,再分别检查浏览器设置和终端环境变量,最后根据连接、解析与证书报错定位故障。适合“网页打不开”“浏览器能用但命令行超时”以及“关闭客户端后仍无法联网”的情况。

系统代理与 TUN:先分清接管范围

系统代理是一份供应用读取的连接设置,不是把所有流量强制送入代理的开关。遵循系统设置的浏览器会连接本地代理端口;忽略这份设置的命令行工具,可能仍然直接联网。v2rayN TUN 模式则通过虚拟网络接口与路由接管流量,涉及权限、路由和 DNS,不能与系统代理混为一谈。

应用读设置 本地代理入口 内核路由匹配 选定出站连接 目标服务响应

这条链路中的任一环节中断,都可能表现为网页加载失败。系统设置正确但内核没有启动,属于本地入口问题;本地入口正常但节点连接失败,属于出站问题;只有某个浏览器失败,则优先查看它自己的代理设置。排查时先使用一种接管方式,暂时关闭 TUN 和其他代理工具,避免多条路径叠加后无法判断请求实际经过哪里。

本地监听:先做一次显式代理测试

打开 v2rayN,确认已选择节点,并查看运行日志是否存在启动失败或端口占用。随后从当前客户端设置或实际运行配置中读取监听地址、端口及入口类型。下面使用 127.0.0.1:10808 作为演示入口,假设它接受 HTTP 代理连接;这不是对所有版本默认端口的声明,执行前必须换成自己的实际值。

10808
演示本地端口,以实际配置为准
5 秒
示例连接超时上限
20 秒
示例请求总超时上限

Windows 可以在 PowerShell 中用以下命令检查端口,再明确指定代理请求一个公开测试域名。使用 curl.exe 是为了避免部分 PowerShell 环境把 curl 解释成其他命令。示例使用 GET 并丢弃响应正文,避免某些站点不接受 HEAD 请求造成误判。

Test-NetConnection -ComputerName 127.0.0.1 -Port 10808

curl.exe --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 20 --output NUL --write-out "HTTP=%{http_code}\n" https://example.com/

TcpTestSucceeded : True 只表示 TCP 端口可连接,不证明该端口接受 HTTP 代理,更不证明远端节点可用。显式请求拿到 HTTP 状态码,才说明至少收到了 HTTP 响应;如果是 403 或其他拒绝状态,还需确认响应来自目标站点还是中间设备。这个测试也只覆盖一个域名,不能代替全部业务验证。

结论:显式代理成功后再改浏览器

如果明确指定本地代理的请求已经成功,先保持节点和内核设置不变,只调整失败应用的代理入口;若测试失败,先解决监听或出站问题,不要反复修改浏览器选项。

浏览器排查:扩展、PAC 与绕过列表

浏览器可能同时存在系统设置、代理扩展和独立配置。先保存当前配置,再逐项检查;每次只改变一个选项,并访问相同目标网址。不要把“换了浏览器后能打开”直接当成节点已经修复,这更可能说明两个浏览器走了不同的连接路径。

  1. 检查系统入口

    Windows 11 打开「设置」→「网络和 Internet」→「代理」,查看「手动设置代理」中的地址和端口,核对是否与客户端当前监听一致。如果使用 PAC,则检查「使用设置脚本」的脚本地址,不要把脚本 URL 当成代理服务器地址。

  2. 暂停代理扩展

    Chrome 打开「扩展程序」→「管理扩展程序」,暂时停用控制代理的扩展。再到「设置」→「系统」→「打开您计算机的代理设置」核对系统配置。若显示设置由组织管理,需检查设备策略,普通开关可能无法覆盖策略。

  3. 核对独立设置

    Firefox 打开「设置」→「常规」→「网络设置」→「设置」,确认选择的是「使用系统代理设置」还是「手动代理配置」。若选手动配置,端口和代理类型都应与本地入口一致,不能把 HTTP 入口误填到 SOCKS 一栏。

  4. 检查绕过条件

    查看系统代理例外、浏览器的「不使用代理」列表和 PAC 返回结果。测试域名如果匹配了绕过条件,请求会直连;PAC 中的 DIRECT 表示直连,PROXY 127.0.0.1:10808 才是使用对应的 HTTP 代理入口。

  5. 重新建立连接

    关闭浏览器的全部窗口后重新启动,排除旧连接复用的影响。隐私窗口并不保证所有扩展都停用,也不会自动忽略系统代理;需要更干净的对照时,可使用未安装扩展的临时浏览器配置。

PAC 是按 URL 或主机名决定连接方式的脚本,不是“开启后全部代理”。如果脚本不可访问、返回旧端口,或规则让目标域名直连,网页仍可能打不开。可以暂时切换为已确认可用的手动代理入口作对照;问题消失后,再恢复 PAC 并检查规则。测试结束应恢复原来的企业网络或局域网例外,避免影响内部服务。

终端排查:http_proxy 与工具自身设置

命令行工具不一定读取系统代理。先使用上面的 --proxy 明确指定入口,成功后再配置环境变量。不要直接写入全局设置:先在当前终端会话验证,确认有效后再决定是否持久化。新开的终端、编辑器内置终端和后台服务可能继承不同的环境,不能用一个窗口的结果推断其他进程。

PowerShell:只修改当前会话

Get-ChildItem Env: | Where-Object Name -Match 'proxy'

$env:http_proxy = "http://127.0.0.1:10808"
$env:https_proxy = "http://127.0.0.1:10808"
$env:no_proxy = "localhost,127.0.0.1,::1"

curl.exe --connect-timeout 5 --max-time 20 --output NUL --write-out "HTTP=%{http_code}\n" https://example.com/

https_proxy 通常用于指定访问 HTTPS 目标时使用的代理,不要求它的值必须以 https:// 开头。不同工具对变量大小写的支持不同;curl 对 http_proxy 有特别的大小写处理,使用小写名称更便于跨环境复用。检查变量时还要留意 ALL_PROXY 和 NO_PROXY,后者可能让目标域名绕过代理。

macOS 与 Linux:检查当前 shell

env | grep -i proxy

export http_proxy='http://127.0.0.1:10808'
export https_proxy='http://127.0.0.1:10808'
export no_proxy='localhost,127.0.0.1,::1'

curl --connect-timeout 5 --max-time 20 --output /dev/null --write-out 'HTTP=%{http_code}\n' https://example.com/
现象优先检查处理方式
显式代理成功,普通请求失败变量未被读取或存在绕过条件核对变量与工具文档,缩小 no_proxy 范围后复测
curl 成功,其他工具失败工具自己的代理配置检查启动参数、配置文件与运行时代理选项
新终端成功,旧终端失败旧进程继承了旧环境重新启动终端或其父进程
容器或虚拟环境连接被拒绝127.0.0.1 指向环境自身使用该环境可达的宿主地址,并核对监听与防火墙

浏览器代理扩展的设置不会自动传给终端,终端变量也不会自动改变已经运行的浏览器。容器里的 127.0.0.1 通常不是宿主机;但不要为了解决这个问题随意开启面向所有网络接口的监听。确需跨环境访问时,应限制来源地址,并设置适当的访问控制。

报错定位:连接、DNS 与 TLS 分开看

保留失败命令的完整报错,并在同一时间段查看客户端日志。浏览器错误页只能说明失败阶段的一部分,命令行详细输出通常更容易区分“本地入口连不上”和“远端握手失败”。分享日志前应移除订阅地址、节点凭据及私人访问记录。

报错:ERR_PROXY_CONNECTION_FAILED

原因:浏览器未能连接所配置的代理入口,常见于客户端退出、端口变化或代理扩展仍指向旧地址。

解法:对当前地址做本地端口测试,再核对浏览器实际使用的代理配置,不要先更换远端节点。

报错:curl: (7) Failed to connect

原因:TCP 连接未建立;需要看后续文字判断失败对象是本地代理地址还是目标服务器。

解法:若失败对象为 127.0.0.1,检查监听端口、内核启动日志和端口占用;若为远端地址,再检查对应网络链路。

报错:curl: (5) Could not resolve proxy

原因:代理主机名无法解析,或变量格式错误导致工具把不正确的内容当成主机名。

解法:核对代理 URL 的协议、主机和端口;本机入口使用实际回环地址,不要把 PAC 脚本地址填入代理变量。

报错:curl: (6) Could not resolve host

原因:目标主机名解析失败;常见于直连路径或由本地解析目标域名的 SOCKS 配置。

解法:先确认请求是否绕过代理,再对比本地解析与代理侧解析;不要仅根据这一条错误更换全部 DNS 设置。

报错:curl: (60) SSL certificate problem

原因:证书信任链验证失败,可能涉及系统时间、缺失的信任证书或网络中的 TLS 检查设备。

解法:检查时间和证书链,按组织要求配置信任证书;不要把长期关闭证书验证作为修复方案。

如果实际入口接受 SOCKS5,可以用下面两条命令对照域名解析位置。socks5:// 让 curl 在本地解析目标域名;socks5h:// 把目标域名交给代理处理。如果只有后一条成功,优先调查本地解析路径。这里仍使用演示端口,HTTP 专用入口不能直接套用 SOCKS 命令。

curl.exe --noproxy "" --proxy socks5://127.0.0.1:10808 --connect-timeout 5 --max-time 20 --output NUL https://example.com/

curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 20 --output NUL https://example.com/

V2Ray 协议选择属于另一层问题:浏览器连接的是本地 HTTP 或 SOCKS 入口,内核再按节点配置使用 VMess、VLESS 协议等出站。更换出站协议不会让一个忽略系统代理的应用突然读取设置。V2Ray 节点测速也只能提供特定测试条件下的参考,不能证明浏览器绕过列表、终端变量或目标网站证书都正确。

恢复与复测:避免残留设置影响直连

排查完成后,应恢复所有临时修改。尤其是客户端已经退出,而系统手动代理仍指向本地端口时,遵循系统设置的浏览器会继续连接一个没有程序监听的入口。应先在 v2rayN 的系统代理菜单中选择「清除系统代理」,再退出客户端;若客户端无法启动,就在操作系统代理设置里手动关闭对应入口。

移除当前会话的代理变量

# PowerShell
Remove-Item Env:http_proxy, Env:https_proxy, Env:all_proxy, Env:no_proxy -ErrorAction SilentlyContinue

# macOS / Linux shell
unset http_proxy https_proxy all_proxy no_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY

以上命令用于清除当前会话中的对应变量,不会删除 Windows 用户级持久变量,也不会修改 shell 启动文件。执行前先记下原值;如果这些变量属于组织提供的网络配置,应恢复原值而不是直接清空。使用编辑器集成终端时,还可能需要重启编辑器,才能摆脱父进程继承的旧变量。

结论:按失败边界保留有效配置

本地入口成功就保留端口设置,显式代理成功就保留节点配置,只有特定应用失败就处理该应用。把一次测试限定为一个变量,通常比重装客户端或反复更新订阅更容易得到可靠结论。

订阅导入解决的是节点配置来源,不会替浏览器设置代理,也不会给终端自动添加环境变量。桌面端应按本文检查 v2rayN 的入口和应用设置;安卓端的 v2rayNG 订阅导入之后,还需要按应用流程启动 VPN 服务,这与桌面系统代理不是同一条路径。需要 v2rayNG 下载或其他 V2Ray 客户端入口时,可以从下载页按平台选择 v2rayN、v2rayNG 或 v2flyNG,再按入门指南完成基础配置。

客户端下载查看四个平台入口