↓ 跳过正文

Linux 系统级代理环境变量一次讲清

·1162 字·3 分钟
作者
吾便宜

在 Linux 上配代理,很多人第一步就栽在环境变量上:curl 能走代理,apt 却不行;终端里 git clone 飞快,浏览器却纹丝不动。问题往往不在代理本身,而在环境变量没配对。

Linux 终端代理环境变量配置示意

插图来源: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,变量写在命令前面

清单六:排查三步走
#

  1. env | grep -i proxy —— 先看变量到底生效了没有
  2. curl -v https://www.google.com —— 看请求是不是真的走了代理
  3. 代理客户端本身在不在运行、端口对不对得上

很多"Linux 下代理失灵"最后查出来都是变量名打错一个字母,或者大小写没配全。

如果你用的是 WSL,情况更特殊——WSL2 和 Windows 宿主机网络是隔离的,localhost 并不互通,具体做法看这篇 WSL 里走代理。另外配好代理后建议顺手检查一下有没有 DNS 泄露和 WebRTC 泄露,环境变量可管不了这两样。