跳到正文

Linux 怎么设置代理:http_proxy、GNOME、apt 与 dnf

如何在 Linux 上设置代理:http_proxy、https_proxy 和 no_proxy 环境变量,重启后保持生效,GNOME 代理面板,以及 apt 和 dnf 各自的设置。

准备工作

先从「我的资产」准备好四个值:地址、端口、用户名和密码。Linux 上的工具请在购买时选 HTTP 协议:Proxy302 的 HTTP 用 2222 端口(SOCKS5 用 3333 端口),而且一个静态 IP 只发放一种协议。本文只讲 Linux:环境变量、GNOME、apt 和 dnf。Windows 11 和 macOS 的系统代理面板,以及「系统代理」和「程序自带代理」的区别,请看代理设置那篇;curl 的各个选项请看 curl 那篇。

最快的办法:在终端里设环境变量

环境变量就是一个有名字的值,程序启动时会去读它。Linux 命令行程序会从 http_proxy、https_proxy 和 no_proxy 这几个变量里找代理。在终端里执行下面几行(把 HOST、PORT、USERNAME、PASSWORD 换成你自己的),从这个终端窗口里启动的程序就都能用上。关掉窗口后设置就没了,所以拿它来先试一下代理最稳妥。

http_proxy 管 http:// 开头的网址,https_proxy 管 https:// 开头的网址。变量里写的是代理本身的地址,所以 HTTP 代理在两个变量里都以 http:// 开头。按 curl 文档的说法,如果同时设了 ALL_PROXY,针对某个协议的变量优先。

环境变量:示例

export http_proxy="http://USERNAME:PASSWORD@HOST:PORT"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1,.example.internal"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$http_proxy"
export NO_PROXY="$no_proxy"

把 HOST、PORT、USERNAME、PASSWORD 换成「我的资产」里的值。

小写还是大写,以及 no_proxy

curl 文档说明:除 http_proxy 外,其他代理变量名都可以写成大写(如 HTTPS_PROXY);http_proxy 只认小写,原因是 CGI 协议(网站服务器把请求交给脚本的一种方式)里大写的 HTTP_PROXY 出过不少安全问题。所以以小写为准;示例里同时设了大写,是因为有些程序只读大写。各个程序怎么读这些变量由程序自己决定,哪个程序不认你的代理,就去看它自己的文档。

no_proxy 是用逗号隔开的主机名列表,列表里的地址不走代理。curl 文档说,以点开头的名字会匹配整个域名,比如 .example.internal 能匹配 www.example.internal;只写一个 * 则匹配所有地址。把 localhost、127.0.0.1 和你自己的内网地址写进去,本地流量就不会绕到代理上。

密码里的特殊字符

如果用户名或密码里有特殊字符,要在地址里做百分号编码:@ 写成 %40,: 写成 %3A,/ 写成 %2F,# 写成 %23,% 写成 %25。不编码的话,地址会在错误的位置被拆开,代理会返回认证错误。最省事的办法是直接从「我的资产」复制,不要手敲。另外要注意:写进变量或配置文件的密码,任何能读这个文件或命令历史的人都看得到。

让变量永久生效

在终端里设的变量,关掉终端就没了。想保留,就把同样的几行写进你所用 shell 的启动文件:bash 用 ~/.bashrc,zsh 用 ~/.zshrc。写完后新开一个终端,或者执行 source ~/.bashrc 让它生效。

想对整个系统生效,可以用 /etc/environment。pam_env 手册说明:它是一行一个的简单 KEY=VAL,export 关键字会被忽略,并且只有应用打开 PAM 会话时才会读取。实际上图形登录和文字登录一般都会,但手册没有列出具体哪些,所以改完请注销再登录,并用后面的方法检查。以后别忘了把代理从 /etc/environment 里删掉,因为它对所有用户、所有程序都生效。

让变量永久生效:示例

# ~/.bashrc (or ~/.zshrc): applies to every new terminal of your user
export http_proxy="http://USERNAME:PASSWORD@HOST:PORT"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1"

# /etc/environment: for the whole system, plain KEY=value lines
http_proxy=http://USERNAME:PASSWORD@HOST:PORT
https_proxy=http://USERNAME:PASSWORD@HOST:PORT
no_proxy=localhost,127.0.0.1

第一部分只对当前用户,第二部分对整个系统;二选一即可,不要两个都写。

GNOME:网络 > 网络代理

  1. 打开代理面板

    打开「活动」概览,输入「网络」并打开,再在左侧列表里选「网络代理」。GNOME 帮助页描述的就是这条路径,不同 GNOME 版本的叫法可能略有不同。

  2. 选择「手动」

    选项有「无」(程序直接连接)、「手动」和「自动」(填一个配置文件的链接)。请选「手动」。

  3. 填写地址和端口

    为需要代理的协议填写代理地址和端口:HTTP、HTTPS、FTP 或 SOCKS。HTTP 代理就在 HTTP 和 HTTPS 两行填同样的地址和端口。

这个面板的局限

GNOME 帮助页说,使用网络连接的应用会采用这些设置,但没有说明哪些程序会去读它,也没有提到代理的用户名和密码。浏览器和桌面应用通常会遵循它,终端工具和 apt 通常不会,这些请按本文其他部分单独设置。需要用户名和密码的代理,请用环境变量,不要用这个面板。

apt(Debian、Ubuntu、Mint)

apt 下载软件包用的是自己的设置,而且 sudo 不一定会把你终端里的变量传给它:sudoers 手册说明,命令默认在一个新的、精简的环境里运行(env_reset)。所以要给 apt 单独建一个文件:新建 /etc/apt/apt.conf.d/95proxy,写入下面两行。apt-transport-http 手册记录了 Acquire::http::Proxy 和 scheme://[[user[:pass]@]host[:port]/] 这种地址写法,并说明值 DIRECT 表示不使用代理;账号密码也可以不写进地址,改放在 apt_auth.conf 里。

我们读过的官方页面没有单独描述 Acquire::https::Proxy;apt.conf 只说 https 作用域写在 apt-transport-https 手册里,而这份手册我们没有读。https 一般也是这样写,所以保留第二行,并用 sudo apt update 确认。

apt:示例

# /etc/apt/apt.conf.d/95proxy
Acquire::http::Proxy "http://USERNAME:PASSWORD@HOST:PORT/";
Acquire::https::Proxy "http://USERNAME:PASSWORD@HOST:PORT/";

用 sudo 创建这个文件,例如 sudo nano /etc/apt/apt.conf.d/95proxy。

dnf(Fedora、RHEL、Rocky、Alma)

dnf 的设置在 /etc/dnf/dnf.conf。DNF 参考文档列出了 [main] 段里的 proxy、proxy_username 和 proxy_password,并说明没设 proxy 时,dnf 会改用 http_proxy 等 curl 环境变量。用户名和密码可以放在各自的选项里,这样就不用做百分号编码。

dnf:示例

# /etc/dnf/dnf.conf
[main]
proxy=http://HOST:PORT
proxy_username=USERNAME
proxy_password=PASSWORD

把这三行加在已有的 [main] 下面。

Linux 上能用 SOCKS5 吗

curl 可以用 SOCKS5:ALL_PROXY=socks5h://USERNAME:PASSWORD@HOST:3333。curl 文档里,socks5 由你的电脑解析网站域名,socks5h 把解析交给代理,所以 socks5h 能让域名查询也走代理。不要假设别的程序也认这样的变量。apt-transport-http 手册把 socks5h 列为 apt 可用的地址方案,但我们读过的 dnf 页面没有说明 SOCKS5;为了两者设置一致,包管理器请用 HTTP 代理。

Docker 和容器

上面的变量不会自动传进 Docker 容器,Docker 守护进程也有自己的设置,这些在另一篇指南里讲。

怎么检查是否生效

  1. 检查出口 IP

    执行下面的第一条命令,它会显示网站看到的 IP、国家和网络。怎么看 ip、country、city、org 这几个字段,见检查代理 IP 的那篇指南。

  2. 检查包管理器

    执行 sudo apt update 或 sudo dnf makecache。能正常下载就说明文件有效;超时则说明没走代理,或代理连不上。

  3. 对比有代理和没代理

    在设了变量的终端里跑一次 curl,再到没设变量的另一个终端里跑一次,两次显示的 IP 应该不同。

怎么检查是否生效:示例

curl https://ipinfo.io/json
sudo apt update          # Debian, Ubuntu
sudo dnf makecache       # Fedora, RHEL and relatives

第一行请在设了变量的那个终端里执行。

关闭代理

在终端里执行下面的 unset 命令。再把你加进 ~/.bashrc 或 /etc/environment 的几行删掉,删除 /etc/apt/apt.conf.d/95proxy,去掉 dnf.conf 里的代理几行,并把 GNOME 面板改回「无」。然后再跑一次 curl 检查,确认显示的是你平时的地址。

关闭代理:示例

unset http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY ALL_PROXY

这只影响当前终端,文件要另外修改。

常见错误

407 Proxy Authentication Required

检查 用户名或密码不对,或者特殊字符没编码。

处理 从「我的资产」重新复制,并对特殊字符做百分号编码。

curl 走了代理,apt 没走

检查 sudo 可能用干净的环境启动 apt。

处理 按上文新建 /etc/apt/apt.conf.d/95proxy。

GNOME 设了,终端显示的还是原来的 IP

检查 终端里的程序读的是自己的变量。

处理 按上文设置 http_proxy 和 https_proxy。

大写的 HTTP_PROXY 没效果

检查 curl 只认小写的 http_proxy。

处理 把 http_proxy 写成小写。

超时

检查 代理在该端口没有响应,或 IP 租期已结束。

处理 在「我的资产」查看到期日,并跑 curl 检查。

用 Proxy302 怎么做

如果你想给服务器或工作电脑一个固定不变的地址,适合用静态住宅 ISP:IP 在整个租期内固定,不会轮换。购买时请选 HTTP,因为 Linux 上的包管理器和大多数命令行工具都支持 HTTP 代理。按流量使用的话,可以选动态住宅流量,按 GB 计费,HTTP 在 proxy.proxy302.com 的 2222 端口,SOCKS5 在 3333 端口。详情见静态住宅代理页面。

用 Proxy302 怎么做: 步骤

  1. 第 1 步

    打开静态住宅 ISP 页面,选择国家,把「协议」设为 HTTP,再选「租期」和「数量」,然后点击「确认费用并生成」。

  2. 第 2 步

    打开「我的资产」并复制 HOST、PORT、USERNAME 和 PASSWORD。「连接工具」页里有填好你自己连接信息的现成示例。HTTP 端口为 2222。

  3. 第 3 步

    把这些值填进 http_proxy 和 https_proxy(如果用 apt 或 dnf,也填进对应的文件)。

  4. 第 4 步

    用 curl https://ipinfo.io/json 检查出口。

  5. 第 5 步

    在中国大陆使用时,请先从「连接工具」页启动辅助工具,并在使用代理期间保持打开。

价格与限制

静态住宅 ISP IP 的价格是一天 US$0.50、30 天 US$7.99,约合每天 US$0.27,各国价格一致。各国的库存每天都会变化,以下单页面为准。没有免费试用,最小购买量是 1 个 IP、1 天。

常见问题

Linux 上应该选 HTTP 还是 SOCKS5?

选 HTTP。我们读过的 dnf 页面只写了代理地址,没有说明是否支持 SOCKS5,所以包管理器用 HTTP 最稳妥。SOCKS5 用在 curl 上没问题。

为什么 sudo 不认我的代理变量?

sudo 默认在一个新的、精简的环境里运行命令(sudoers 手册里的 env_reset)。请给 apt 和 dnf 各自的配置文件设置代理。

小写和大写的变量都要设吗?

对 curl 来说小写最可靠。两种都设没有代价,还能覆盖只读大写名字的程序。

GNOME 面板里设了代理,终端也会走代理吗?

不会。终端里的程序读的是环境变量。

参考资料

9
  1. curl:Everything curl,代理环境变量

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:[协议]_proxy 变量、ALL_PROXY、具体变量优先、除 http_proxy 外的名称都可以用大写、NO_PROXY 是逗号分隔的列表、以点开头可匹配整个域名。

    页面只给出 http:// 的示例,没有规定代理地址的协议写法。

  2. curl:Everything curl,SOCKS 代理

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:socks5 由 curl 本地解析域名,socks5h 把解析交给代理。

  3. Ubuntu 手册:apt.conf(5)

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:配置片段放在 /etc/apt/apt.conf.d/,按字母数字顺序读取;http 和 https 作用域分别写在 apt-transport-http 和 apt-transport-https 手册中。

    该页没有直接说明 Acquire::https::Proxy,也没有 HTTP 代理的示例。

  4. Ubuntu 手册:apt-transport-http(1)

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:Acquire::http::Proxy、系统级配置使用 http_proxy 变量、用 DIRECT 表示不走代理、地址格式 scheme://[[user[:pass]@]host[:port]/],以及可改用 apt_auth.conf(5) 保存账号密码。

    该页只涉及 http 作用域,没有读 apt-transport-https 手册;页面还列出了 socks5h、http、https 三种地址方案。

  5. DNF 配置参考

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:main 段中的 proxy、proxy_username、proxy_password、proxy_auth_method,默认配置文件 /etc/dnf/dnf.conf。未设置 proxy 时会使用 http_proxy 等 curl 环境变量。

  6. GNOME 帮助:更改网络代理设置

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:活动、网络、网络代理;选项为「无」「手动」「自动」;手动模式可为 HTTP、HTTPS、FTP 和 SOCKS 填写地址和端口。

    该页没有提到代理的用户名和密码,也没有列出哪些程序会读取这些设置。

  7. Linux 手册:pam_env(8)

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:/etc/environment 是简单的 KEY=VAL 行,export 关键字会被忽略,只有应用打开 PAM 会话时该模块才会生效。

    该页没有列出哪些登录方式会打开这样的会话。

  8. sudo 手册:sudoers(5)

    官方文档 · 确认日期:

    2026 年 11 月 2 日阅读:env_reset 默认开启,命令在新的最小环境里运行;只有设置了 SETENV 才能用 -E 选项为单个命令关闭它。

    该页没有直接提到 http_proxy。

  9. Proxy302 产品事实与价目表

    产品观察 · 确认日期:

    网站的产品事实文件(2026 年 10 月 18—19 日对照控制台、后端和价格表核对):协议与端口、美元价格(1 PTC = US$1)、租期、没有免费试用。

准备好试试了吗?

注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。