网络手记
命令行为什么绕过机场代理?检查 NO_PROXY 与代理环境变量
机场客户端已经开启,浏览器也能走代理,但 curl 或开发工具仍显示直连,常见原因不只是不支持系统代理。HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 和 NO_PROXY 等环境变量可能单独决定命令行请求的路径。
NO_PROXY 会做什么
curl 官方文档说明,NO_PROXY 是一组不经过代理的主机名、域名或 IP;设置为 * 时会匹配所有目标。即使同时指定了代理,匹配到的目标仍可能直连。因此,客户端运行并不等于每个命令都使用它。
先在新的 PowerShell 窗口查看相关变量:
Get-ChildItem Env: | Where-Object Name -Match 'PROXY'
记录变量名即可,分享排障信息时应删除代理账号、密码、订阅地址等敏感值。
做两次明确对照
第一次让 curl 使用你确认过的本地代理地址,并把 NO_PROXY 临时置空:
curl.exe --noproxy "" --proxy "http://127.0.0.1:本地端口" `
-sS -o NUL -w "code=%{response_code} proxy=%{proxy_used} remote=%{remote_ip}\n" `
"https://你有权测试的目标/"
第二次显式绕过代理:
curl.exe --noproxy "*" -sS -o NUL `
-w "code=%{response_code} proxy=%{proxy_used} remote=%{remote_ip}\n" `
"https://你有权测试的目标/"
部分旧版 curl 没有 proxy_used 变量,可先运行 curl.exe --version,再通过成功状态、客户端连接日志和两次结果差异判断。使用本地 HTTP 代理时,remote_ip 可能只是本机代理端点,不能把它当作机场出口 IP。
排查顺序
先确认命令使用了哪组环境变量,再确认代理端口是否与客户端一致,最后检查分流规则。NO_PROXY 只决定是否绕过代理,不证明代理后的公网出口、DNS 路径或目标网站可用。
验收标准
修正后,显式代理和显式直连两次测试应产生可解释的路径差异;关闭当前 PowerShell 后,临时设置不应污染其他任务。若显式代理仍失败,再检查本地监听端口和客户端日志。
评论