跳转到内容
Guides 3 分钟阅读 933 次浏览

Linux 代理配置

Linux 代理配置完整指南:环境变量配置、APT 包管理与 Systemd 集成。

Linux 代理配置

在 Linux 上配置代理,需要为用户会话设置环境变量、为包管理配置 APT,并为 Systemd 服务指定代理设置,以确保所有系统组件都能通过代理访问外部网络。

许多 Linux 环境运行在企业防火墙之后,或出于安全、日志记录和访问控制的需要,必须让流量经由代理服务器转发。正确的代理配置对系统功能至关重要,涉及软件更新、用户应用的互联网访问以及后台服务的通信。本文详细说明在常见 Linux 组件中配置代理的方法。

环境变量

Shell 环境以及继承该环境的应用程序,通常依赖标准环境变量来完成代理配置。这些变量定义了 HTTP、HTTPS 和 FTP 流量的代理服务器地址,以及需要直连的例外项。

标准代理环境变量

  • HTTP_PROXY:HTTP 连接使用的代理。
  • HTTPS_PROXY:HTTPS 连接使用的代理。
  • FTP_PROXY:FTP 连接使用的代理。
  • NO_PROXY:以逗号分隔的主机名、IP 地址或 CIDR 段列表,这些目标将绕过代理。示例:localhost,127.0.0.1,*.local,192.168.0.0/24

在某些场景下这些变量区分大小写(例如 wget 常用小写的 http_proxy,而其他程序偏好大写的 HTTP_PROXY)。通行做法是同时设置大写和小写版本,以获得更广泛的兼容性。

临时的 Shell 会话配置

为当前 Shell 会话及由其启动的所有进程设置代理变量:

export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"

# 为兼容性起见,同时设置小写版本
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"

请把 proxy.example.com:8080 替换为您的代理服务器地址和端口。如果需要认证,请附上凭据:http://user:[email protected]:8080

针对用户的持久化配置

若希望代理设置在用户登录会话之间持久生效,请把 export 命令写入该用户的 Shell 配置文件。

  • Bash: ~/.bashrc~/.profile
  • Zsh: ~/.zshrc

~/.bashrc 示例:

# 代理设置
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"

修改后请重新加载该文件,或退出并重新登录:source ~/.bashrc

系统级持久化配置

若要设置影响所有用户和部分系统进程(但不直接覆盖所有 Systemd 服务)的系统级代理,请使用 /etc/environment/etc/profile.d/ 中的文件。

/etc/environment

该文件在登录时由 PAM(Pluggable Authentication Modules)读取,作用于登录 Shell 启动的所有服务和应用。它只支持 KEY="value" 语法,不支持 export

HTTP_PROXY="http://proxy.example.com:8080"
HTTPS_PROXY="http://proxy.example.com:8080"
FTP_PROXY="http://proxy.example.com:8080"
NO_PROXY="localhost,127.0.0.1,.example.com"
http_proxy="http://proxy.example.com:8080"
https_proxy="http://proxy.example.com:8080"
ftp_proxy="http://proxy.example.com:8080"
no_proxy="localhost,127.0.0.1,.example.com"

/etc/environment 的更改通常需要重启系统或重新登录,新会话才会生效。

/etc/profile.d/

放在 /etc/profile.d/ 中的脚本会被登录 Shell 加载。适合用来设置需要逻辑判断或 export 语句的环境变量。新建一个文件,例如 /etc/profile.d/proxy.sh

#!/bin/bash
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export FTP_PROXY="http://proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.example.com"
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export ftp_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1,.example.com"

请确保该脚本可执行:sudo chmod +x /etc/profile.d/proxy.sh

sudo 与代理变量

使用 sudo 时,出于安全考虑环境变量通常会被重置。要在 sudo 执行的命令中保留代理设置:

  1. 使用 sudo -E:保留当前的环境变量。
    bash sudo -E apt update
  2. 配置 sudoers:用 sudo visudo 编辑 /etc/sudoers,添加或修改 env_keep
    Defaults env_keep += "HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY http_proxy https_proxy ftp_proxy no_proxy"
    对于持久化的系统配置,这种方式通常比 sudo -E 更安全。

APT(Advanced Package Tool)

APT 是 Debian 系发行版(例如 Ubuntu)使用的包管理器,它需要独立于 Shell 环境变量的代理配置。

APT 代理配置文件

APT 的代理设置定义在 /etc/apt/apt.conf.d/ 目录下的配置文件中。新建一个文件,例如 /etc/apt/apt.conf.d/01proxy,内容如下:

Acquire::http::Proxy "http://proxy.example.com:8080/";
Acquire::https::Proxy "http://proxy.example.com:8080/";
# Acquire::ftp::Proxy "ftp://proxy.example.com:8080/"; # 如有需要请取消注释

请把 proxy.example.com:8080 替换为您的代理服务器地址和端口。

如果代理需要认证:

Acquire::http::Proxy "http://user:[email protected]:8080/";
Acquire::https::Proxy "http://user:[email protected]:8080/";

对于需要绕过 APT 代理的主机,请使用 Acquire::NoProxy

Acquire::NoProxy "localhost,127.0.0.1,archive.ubuntu.com";

它不如全局 NO_PROXY 常用,但可以专门作用于 APT。

创建或修改该文件后,APT 会在后续操作(例如 apt updateapt install)中自动使用这些设置,无需重启服务。

Systemd 服务

Systemd 负责管理系统服务和应用。由 Systemd 启动的服务不会自动继承 Shell 配置文件或 /etc/environment 中设置的代理环境变量。每个需要代理访问的 Systemd 单元都必须显式配置。

为特定 Systemd 服务配置代理

要为单个 Systemd 服务配置代理设置,请创建 override 文件。这是推荐做法,可避免直接修改原始单元文件——那些文件在软件包更新时可能被覆盖。

  1. 创建 override 目录:
    bash sudo systemctl edit <service_name>
    该命令会打开 /etc/systemd/system/<service_name>.service.d/override.conf 的编辑器。

  2. 添加代理环境变量:
    在编辑器中添加 [Service] 小节和 Environment 指令:

    ini [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080" \ "HTTPS_PROXY=http://proxy.example.com:8080" \ "NO_PROXY=localhost,127.0.0.1" Environment="http_proxy=http://proxy.example.com:8080" \ "https_proxy=http://proxy.example.com:8080" \ "no_proxy=localhost,127.0.0.1"
    每条 Environment 指令可以在引号内用空格分隔多个变量,也可以使用多行 Environment\ 用于 override 文件中的续行。

  3. 保存并退出: 保存文件后,Systemd 会自动重新加载守护进程并提示重启该服务,请确认重启。若未出现提示,请手动重新加载并重启:
    bash sudo systemctl daemon-reload sudo systemctl restart <service_name>

全局 Systemd 代理配置

对于没有单独代理设置的服务,或需要一个系统级默认值时,可在 Systemd 的全局环境中配置代理。这会影响所有未显式覆盖这些变量的服务。

  1. 创建 drop-in 配置目录:
    bash sudo mkdir -p /etc/systemd/system.conf.d/

  2. 创建代理配置文件:
    bash sudo nano /etc/systemd/system.conf.d/proxy.conf

  3. 添加代理环境变量:
    ini [Manager] DefaultEnvironment="HTTP_PROXY=http://proxy.example.com:8080" DefaultEnvironment="HTTPS_PROXY=http://proxy.example.com:8080" DefaultEnvironment="NO_PROXY=localhost,127.0.0.1" DefaultEnvironment="http_proxy=http://proxy.example.com:8080" DefaultEnvironment="https_proxy=http://proxy.example.com:8080" DefaultEnvironment="no_proxy=localhost,127.0.0.1"

  4. 重新加载 Systemd 守护进程并重启服务:
    bash sudo systemctl daemon-reload sudo systemctl restart --all # 请谨慎使用,会重启所有用户服务和系统服务
    要确保所有服务都应用这些全局更改,完整重启系统往往是最稳妥的方式。

验证

配置好代理后,请验证其是否生效:

  • 环境变量:
    bash env | grep -i proxy
  • APT:
    bash apt config dump | grep -i proxy
    尝试执行更新:sudo apt update
  • 常规网络访问:
    bash curl -v http://ifconfig.me
    如果流量经由代理转发,输出应显示代理服务器的 IP 地址;如果 NO_PROXY 生效,则显示您的外网 IP。
  • Systemd 服务: 检查服务状态和日志,排查连接问题。
    bash sudo systemctl status <service_name> sudo journalctl -u <service_name>
    您也可以检查正在运行的服务进程的环境。先找到该服务的 PID,然后执行:
    bash sudo cat /proc/<PID>/environ | tr '\0' '\n' | grep -i proxy

各种代理配置方法对比

方法 作用范围 是否持久 受影响的组件 配置示例
Shell 环境(临时) 当前 Shell 会话 从当前 Shell 启动的命令 export HTTP_PROXY="..."
用户配置文件(~/.bashrc 该用户的登录会话 用户应用、Shell 命令 ~/.bashrc 中添加 export
系统级(/etc/environment 所有登录会话及部分系统进程 登录 Shell、部分应用(非 Systemd) /etc/environment 中写 HTTP_PROXY="..."
系统级(/etc/profile.d/ 所有登录 Shell 登录 Shell 及由其启动的应用 /etc/profile.d/ 放含 export 行的脚本
APT(/etc/apt/apt.conf.d/ 仅 APT 包管理器 aptapt-getaptitude 01proxy 中写 Acquire::http::Proxy "...";
Systemd 服务 override(override.conf 指定的 Systemd 单元 单个 Systemd 服务 /etc/systemd/system/<service>.service.d/override.conf 中写 Environment="..."
全局 Systemd(system.conf.d/ 所有 Systemd 服务(默认值) 未被覆盖的所有 Systemd 服务 /etc/systemd/system.conf.d/proxy.conf 中写 DefaultEnvironment="..."
已更新: 03.03.2026
返回分类

试用我们的代理

遍布 100+ 国家的 20,000+ 代理

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.