终端不吃系统代理
系统代理只对遵守系统设置的程序有效。绝大多数命令行工具不读它,它们看的是 http_proxy 和 https_proxy 环境变量,或者自己的配置文件。所以开着系统代理、浏览器一切正常,git clone 照样超时,这是正常现象,不是客户端坏了。
有两个例外要先记住:TUN 模式在网络层接管流量,命令行工具不配也能走;而 SSH 任何时候都不认 http_proxy,必须用 ProxyCommand。
按工具分别配置
- 1
临时生效:环境变量
Linux 和 macOS 用 export https_proxy 和 http_proxy 指向 http://127.0.0.1:7897;PowerShell 用 $env:HTTPS_PROXY 赋同样的值。只对当前终端窗口有效,关掉就没了。要长期生效写进 .bashrc 或 PowerShell 配置文件。
- 2
Git
git config --global http.proxy 加上代理地址,https 同理。只想给 GitHub 走代理,用带域名前缀的写法:git config --global http.https://github.com/.proxy。取消加 --unset。
- 3
npm 与 pip
npm config set proxy 设的是代理,registry 是换源,两件事别混。pip 用 --proxy 参数临时指定,或写进 pip.conf;国内装包换源通常比走代理快。
- 4
SSH
在 ~/.ssh/config 里给对应 Host 加一行 ProxyCommand。Linux 和 macOS 常用 nc -X 5 -x 走 SOCKS5,Windows 可以用 Git 自带的 connect 工具。
验证与常见写错的地方
跑一次 curl 访问 ipinfo.io/ip,返回的地址是节点 IP 就说明生效了。如果 curl 通但 git 不通,用 git config --global --get http.proxy 单独确认一下那份配置。
- https_proxy 的值以 http:// 开头,不是 https://,那指的是代理服务器自己的协议
- 地址末尾不要带斜杠,也不要带路径
- 用 no_proxy 排除 localhost、127.0.0.1 和公司内网域名
常见问题
设了环境变量还是 connection refused?
按概率排:端口号写错、客户端没在运行、写成了 https:// 开头。先确认客户端界面里显示的混合端口和你填的一致。
配了代理之后内网地址访问不了?
把内网域名和网段加进 no_proxy,比如 localhost、127.0.0.1 以及内部域名后缀。Git 和 npm 也有各自的 noproxy 配置项。