在 Linux 上配代理,很多人第一步就栽在环境变量上:curl 能走代理,apt 却不行;终端里 git clone 飞快,浏览器却纹丝不动。问题往往不在代理本身,而在环境变量没配对。
插图来源:Storyset
清单一:四个核心变量各管什么#
- http_proxy:管 HTTP 请求的代理。注意名字里带 http,但它实际管的是"走 HTTP 协议发出的请求"。
- https_proxy:管 HTTPS 请求的代理。日常上网绝大多数流量是 HTTPS,所以这个变量最关键,漏配它等于没配。
- all_proxy:兜底变量。上面两个没设置时,很多工具会退回到 all_proxy,适合图省事时只写一个。
- no_proxy:白名单。写在这里的域名或 IP 不走代理,比如 localhost、局域网地址。
清单二:大小写之争#
Linux 约定俗成用小写(http_proxy),但部分软件只认大写(HTTP_PROXY)。最稳妥的做法是大小写各写一份,多两行命令的事,省得以后一个个排查:
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"端口换成你自己客户端的本地监听端口,常见的是 7890、10809 之类,具体看你用的哪款客户端。
清单三:哪些软件认,哪些不认#
认环境变量的(以命令行工具为主):
- curl、wget:认 http_proxy / https_proxy
- git:既认自身的 http.proxy 配置,也认环境变量
- ssh:不认,需要走 ProxyCommand 或 nc 配合
不认环境变量的:
- apt / yum:要单独写配置文件,apt 是 /etc/apt/apt.conf.d/ 下加 Acquire::http::Proxy
- pip、npm:各有自己的 proxy 配置项
- 浏览器(Chrome、Firefox):走自己的代理设置或系统代理
- 大部分图形界面软件:走桌面环境的网络代理设置
所以"终端能用、浏览器不能用"是正常现象,不是代理坏了。想了解各平台客户端的通用配置思路,可以看这篇客户端配置总览。
清单四:no_proxy 的正确写法#
export no_proxy="localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8"
export NO_PROXY="localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8"要点:逗号分隔、不加空格;localhost 和 127.0.0.1 一定要写进去,否则本地服务会被代理绕一圈,轻则变慢,重则连不上。
清单五:让配置永久生效#
export 只对当前终端会话有效,关掉终端就没了。想永久生效:
- 只给自己用:写进
~/.bashrc或~/.zshrc末尾,改完 source 一下 - 给全系统所有用户:写进
/etc/environment(注意这里不用加 export,直接写http_proxy=...) - 只给某条命令临时用:
https_proxy=... curl example.com,变量写在命令前面
清单六:排查三步走#
env | grep -i proxy—— 先看变量到底生效了没有curl -v https://www.google.com—— 看请求是不是真的走了代理- 代理客户端本身在不在运行、端口对不对得上
很多"Linux 下代理失灵"最后查出来都是变量名打错一个字母,或者大小写没配全。
如果你用的是 WSL,情况更特殊——WSL2 和 Windows 宿主机网络是隔离的,localhost 并不互通,具体做法看这篇 WSL 里走代理。另外配好代理后建议顺手检查一下有没有 DNS 泄露和 WebRTC 泄露,环境变量可管不了这两样。