linux终端走http代理的核心是正确设置小写http_proxy和https_proxy环境变量,需严格遵循export语法、协议前缀、无空格赋值,且no_proxy须用逗号分隔的后缀匹配列表。

终端走 HTTP 代理,核心就是正确设置 http_proxy 和 https_proxy 这两个环境变量,且大小写、协议头、export 关键字一个都不能错。
为什么 export http_proxy=http://x.x.x.x:port 不生效?
最常见原因是变量名写错或赋值格式不合法:
-
http_proxy必须全小写,HTTP_PROXY在部分程序(如curl)里也认,但git、wget、apt等只严格识别小写形式 - 等号
=两边不能有空格:✅export http_proxy=http://p:8080,❌export http_proxy = http://p:8080 - 必须带
http://协议前缀,即使代理本身是 HTTPS ——https_proxy才走 HTTPS 隧道,http_proxy值只是告诉客户端“用这个地址发 CONNECT 请求” - 没执行
export就只是普通 shell 变量,子进程(比如你运行的curl)根本看不到
no_proxy 怎么写才真正跳过代理?
no_proxy 不是通配符匹配,而是逗号分隔的“后缀匹配”列表,且不支持 * 通配符(除非你的程序自己实现):
- ✅
export no_proxy="localhost,127.0.0.1,.example.com"——.example.com会匹配api.example.com和www.example.com - ❌
export no_proxy="*.example.com"—— 大多数工具直接忽略这个条目 - ❌
export no_proxy="192.168.*.*"—— 不生效,只能写成"192.168.0.0/16"(仅curl支持 CIDR,git不支持) - 建议始终包含
localhost,127.0.0.1,::1,否则本地服务调用可能被意外转发
认证代理怎么填用户名密码?
直接拼在 URL 里是最通用的做法,但要注意 URL 编码:
- ✅
export http_proxy=http://user:pass@proxy.example.com:8080 - ⚠️ 如果密码含
@、/、:,必须先 URL 编码,比如密码ab@c/d→ab%40c%2Fd - ❌ 不要拆成
export http_proxy_user=user+export http_proxy_pass=pass—— 只有极少数老工具(如某些版本wget)支持,git、curl全都不认 - HTTPS 代理同理:
export https_proxy=http://user:pass@proxy.example.com:8080(注意仍是http://前缀)
临时设置 vs 永久设置,选哪个文件?
别硬背路径,按生效范围选:
- 只当前终端有效:直接运行
export http_proxy=...,关掉终端就消失 - 当前用户所有新终端有效:写进
~/.bashrc(Bash)或~/.zshrc(Zsh),然后source ~/.bashrc - 所有用户(包括 root 和 GUI 应用):写进
/etc/environment(systemd 系统推荐)或/etc/profile.d/proxy.sh(需chmod +x) - 别往
/etc/profile里硬塞 —— 它只在登录 shell 生效,很多 GUI 终端(如 GNOME Terminal)启动的是非登录 shell,读不到
复杂点在于:不是所有命令都读这些变量。curl、wget、git、npm、pip 都认;但 apt 要单独配 /etc/apt/apt.conf,docker 要改 /etc/docker/daemon.json,GUI 应用(如 Chrome)甚至要传启动参数。真要“全局”,得一层层对齐,不能只靠 http_proxy。











