Linux命令行HTTP代理配置需分场景:临时用export设http_proxy等变量仅当前终端有效;永久生效须写入~/.bashrc(用户级)或/etc/environment(系统级),但systemd、cron等不继承;no_proxy必须显式含localhost、127.0.0.1且逗号分隔,不支持通配符或CIDR。
Linux命令行配置HTTP代理,最直接有效的方式是设置环境变量,但不同场景下生效范围和持久性差异极大——不区分用途硬写export到~/.bashrc,很可能导致git clone走代理而curl localhost:3000也绕路失败。
环境变量法:当前会话 vs 永久生效的边界在哪
临时设置只影响当前终端进程及其子进程,关闭终端即失效;永久生效需写入shell初始化文件,但仅对新启动的交互式shell有效(非登录shell如systemd服务、cron任务、GUI应用通常不读~/.bashrc)。
-
http_proxy和https_proxy必须全小写,部分工具(如wget)不识别大写形式的HTTP_PROXY -
no_proxy值用英文逗号分隔,且必须包含localhost和127.0.0.1,否则本地开发服务可能被意外转发 - 若代理需认证,格式为
http://user:pass@10.0.0.1:8080,但密码含特殊字符(如@、/)时需URL编码,否则curl会解析失败
Git / wget / curl 各自认什么代理配置
不是所有工具都乖乖读http_proxy环境变量。Git默认优先读自己的配置项,wget在无环境变量时会 fallback 到/etc/wgetrc,而curl则严格按-x参数 > 环境变量 > 编译默认顺序生效。
- Git强制走代理:运行
git config --global http.proxy http://10.0.0.1:8080,否则git clone可能直连超时 - curl临时覆盖:用
curl -x http://10.0.0.1:8080 https://api.example.com,比改环境变量更安全,避免污染后续命令 - wget忽略环境变量?检查
/etc/wgetrc里是否有http_proxy = off或use_proxy = off,有则注释掉
系统级代理(apt/yum)为什么单独配
apt和yum根本不看http_proxy环境变量,它们只认自己配置文件里的Acquire::http::Proxy这类硬编码键名。写错格式或漏掉Acquire::前缀,代理就完全不生效。
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
- Debian/Ubuntu:
sudo tee /etc/apt/apt.conf.d/80proxy写入Acquire::http::Proxy "http://10.0.0.1:8080";,注意末尾分号不能丢 - RHEL/CentOS:
sudo tee /etc/yum.conf追加proxy=http://10.0.0.1:8080,不支持HTTPS代理字段,https_proxy对yum无效 - 验证
apt是否真走代理:运行sudo apt update -o Debug::Acquire::http=true 2>&1 | grep "Connecting to",看到连接目标IP才是关键
no_proxy 的坑:点号开头不是通配符,是字面量
no_proxy=".example.com"中的点号.不会匹配www.example.com,它只是字符串的一部分。实际行为是:只跳过域名**以.example.com结尾**的请求,比如api.example.com会绕过,但example.com本身不会。
- 要同时排除
example.com和其子域,得写成no_proxy="localhost,127.0.0.1,example.com,.example.com" - 内网地址别偷懒写
192.168.*——no_proxy不支持通配符,必须列全192.168.1.0/24这种CIDR也不行,只能写192.168.1.1,192.168.1.2,...或用192.168.1.(注意结尾点号) - 某些老版本curl把
no_proxy当大小写敏感,写成NO_PROXY可能失效
真正麻烦的从来不是设代理,而是搞清哪个进程读哪个配置、哪个工具认哪种语法、以及no_proxy里那个不起眼的点号到底代表什么——这些细节不验证,光靠复制粘贴,十次有八次连不上内网服务。
