← 返回 天枢互联 | 简单易用 与世界互联 首页

简单易用的Linux代理怎么设置?先让终端联网再验证

更新于 2026-10-27 · tianshuhl.shop

简答:如果你已经有代理主机和端口,最快做法是在当前终端设置http_proxy、https_proxy和no_proxy,再用curl验证。HTTP代理通常写成<code>http://主机:端口</code>,SOCKS5代理写成<code>socks5h://主机:端口</code>;不要因为目标网址是HTTPS,就把代理地址自动改成<code>https://</code>。如果curl有效但APT、Docker或某个应用仍失败,说明它可能使用独立配置,本文先解决Linux终端这一层。

定义:Linux终端代理设置,是通过Shell环境变量或curl命令参数,把代理协议、地址、端口及可选认证信息交给当前命令行会话使用。

先看这里:3步让当前Linux终端使用代理

本文是第三方使用指南,不代表任何代理服务或软件的官方页面。下面假设你已经拿到代理主机、端口和协议;proxy.example.com:3128只是占位示例,请替换成自己的参数。

  1. 先确认代理类型:普通HTTP代理使用http://proxy.example.com:3128;SOCKS5代理可使用socks5h://proxy.example.com:1080。curl官方文档明确区分HTTP、SOCKS4、SOCKS5和SOCKS5H代理前缀;目标网址是HTTPS,不代表代理地址就必须使用https://。curl官方参数文档
  2. 设置当前Shell:如果是HTTP代理,执行export http_proxy='http://proxy.example.com:3128'; export https_proxy='http://proxy.example.com:3128'; export no_proxy='localhost,127.0.0.1,::1,.local'。如果是SOCKS5代理,把前两处代理地址替换为socks5h://proxy.example.com:1080。
  3. 立即验证:执行curl -I --max-time 15 https://example.com。能返回HTTP响应头,说明curl已经发起并完成了请求;如果出现超时、无法连接或代理协议错误,先回到第一步核对协议、主机和端口。

curl支持按协议设置的http_proxy、HTTPS_PROXY,也支持作为通用代理的ALL_PROXY和排除列表NO_PROXY。命令行中的-x或--proxy可以覆盖环境变量,适合只测试一次而不修改当前Shell。curl官方教程

HTTP、HTTPS和SOCKS5代理怎么区分

代理类型示例什么时候使用
HTTP代理http://host:port代理服务明确提供HTTP协议时使用,也可以承载对HTTPS目标网站的请求。
HTTPS代理https://host:port仅当代理服务器本身要求通过TLS建立代理连接时使用,不能因为目标网址是HTTPS就自动填写。
SOCKS5代理socks5://host:port代理服务明确提供SOCKS5,且应用支持SOCKS5时使用。
SOCKS5H代理socks5h://host:portcurl支持该写法,域名解析由代理端处理;是否支持要看具体应用。

最容易出错的地方是“目标协议”和“代理协议”混淆。例如访问https://example.com时,代理仍可能是http://proxy.example.com:3128。curl官方说明,未指定代理协议时通常按HTTP代理处理;只有代理服务本身采用TLS时,才使用https://代理前缀。curl代理参数说明

如果代理需要用户名和密码,可以使用带认证信息的代理URL,但密码中出现@、:、#或空格时,不能直接按普通字符拼接。更稳妥的做法是使用应用提供的认证参数,或者先对特殊字符进行URL百分号编码。带密码的命令不要提交到公开仓库、共享脚本、截图或工单中。

让当前用户长期生效:写入Shell启动文件

临时设置只对当前终端会话有效。关闭终端后仍想自动加载,可以把代理变量写入当前用户的Shell启动文件。Bash通常使用~/.bashrc,Zsh通常使用~/.zshrc;如果你不确定当前Shell,可先执行printf '%s\n' "$SHELL"查看。

  1. 先备份:cp ~/.bashrc ~/.bashrc.backup。如果你使用Zsh,则把文件名替换为~/.zshrc。
  2. 编辑文件:在文件末尾加入下面三行,按实际代理信息替换占位内容:export http_proxy='http://proxy.example.com:3128'、export https_proxy='http://proxy.example.com:3128'、export no_proxy='localhost,127.0.0.1,::1,.local'。
  3. 重新加载:Bash执行source ~/.bashrc,Zsh执行source ~/.zshrc。
  4. 检查变量:执行env | grep -i proxy,确认代理地址和排除列表已经出现。
  5. 再次验证:执行curl -I --max-time 15 https://example.com,不要只看变量存在就判断代理一定可用。

curl文档指出,小写http_proxy具有特殊处理,实际使用时建议保留小写变量;如果某个程序只读取大写变量,再按该程序文档补充对应变量。不要为了“全局生效”直接把带密码的代理URL写入所有用户可读的系统文件。

取消当前终端代理

只取消当前会话,可执行unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY no_proxy NO_PROXY。如果你把变量写入了~/.bashrc或~/.zshrc,还要删除对应行,再重新打开终端或重新执行启动文件,否则新会话仍会继续加载代理。

验证失败时,按这一条链路排查

现象先检查什么下一步
curl提示代理协议错误代理前缀是否填错,例如把HTTP代理写成socks5h://。按服务实际提供的协议重新填写,不要仅凭端口号判断类型。
curl连接超时主机、端口、网络连通性和代理是否要求认证。用curl -v --max-time 15查看连接阶段,区分连接代理失败还是访问目标失败。
变量存在但curl仍直连是否设置了NO_PROXY=*,或目标域名是否命中排除列表。暂时执行unset NO_PROXY no_proxy后重新测试;确认后再恢复必要的内网排除项。
curl成功但APT不成功APT是否使用独立代理配置,或当前发行版的配置文件是否覆盖了环境变量。按当前发行版的APT文档检查Acquire::http::Proxy等配置。APT官方手册同时列出环境变量和专用配置方式,具体支持以系统版本文档为准。Debian APT官方手册
curl成功但Docker不成功Docker CLI和Docker daemon是否使用不同的配置层。不要继续修改Shell变量,改查Docker daemon的代理配置和重启状态。本文不展开Docker配置,避免把终端代理误当成服务代理。

建议按“变量检查—curl请求—具体应用”的顺序验证,每次只改一个变量。这样可以判断问题是在代理参数、Shell环境,还是具体程序的独立配置层。若使用curl -v,重点观察是否先连接到代理主机,以及是否收到代理返回的状态,而不是只看最终网页内容。

如果你需要为APT、Git、Docker或桌面应用设置代理,不要直接假设它们都会继承当前Shell。Git官方文档说明,Git可以读取常见代理环境变量,也可以通过自己的配置项设置代理;Docker官方文档则明确区分CLI与daemon代理配置。Git官方常见问题 Docker官方daemon代理文档

常见问题 FAQ

访问HTTPS网站时,代理地址一定要写成https://吗?

不一定。目标网站使用HTTPS,与代理服务器采用什么协议是两件事。很多场景仍然使用http://代理主机:端口承载对HTTPS目标的请求;只有代理服务器本身要求TLS连接时,才使用https://代理前缀。

Linux终端应该设置http_proxy还是ALL_PROXY?

优先按代理类型设置http_proxy和https_proxy,这样更容易判断哪些请求走了代理。ALL_PROXY适合作为没有专用变量时的通用回退,但不同程序对环境变量的支持范围可能不同,不能把它当成所有应用都生效的保证。

为什么设置了代理,访问localhost仍然绕代理?

检查no_proxy或NO_PROXY是否包含localhost、127.0.0.1和::1。curl支持用逗号分隔的主机名和域名排除列表;域名匹配方式要按具体工具文档核对。

代理用户名或密码包含@怎么办?

@等字符在代理URL中有特殊含义。优先使用程序提供的独立认证参数;如果必须写入URL,应按URL规则进行百分号编码,并检查配置文件权限和Shell历史,避免明文凭据泄露。

设置环境变量后,为什么APT或Docker还是不能用?

环境变量只对会读取它的程序生效。APT可以使用自己的代理配置,Docker CLI和Docker daemon也可能处于不同配置层。先用curl确认基础代理链路,再按照具体程序的官方文档单独配置,不要把一个程序的成功结果当成所有程序都成功。

常见问题

访问HTTPS网站时,代理地址一定要写成https://吗?

不一定。目标网站使用HTTPS,与代理服务器采用什么协议是两件事。很多场景仍然使用http://代理主机:端口承载对HTTPS目标的请求;只有代理服务器本身要求TLS连接时,才使用https://代理前缀。

Linux终端应该设置http_proxy还是ALL_PROXY?

优先按代理类型设置http_proxy和https_proxy,便于判断请求是否走代理。ALL_PROXY可作为通用回退,但不同程序支持范围不同,不能保证所有应用都生效。

为什么设置了代理,访问localhost仍然绕代理?

检查no_proxy或NO_PROXY是否包含localhost、127.0.0.1和::1。curl支持使用逗号分隔的主机名和域名排除列表。

代理用户名或密码包含@怎么办?

@、#和:等字符在代理URL中有特殊含义。优先使用程序提供的独立认证参数;必须写入URL时,按URL规则进行百分号编码,并检查配置文件权限和Shell历史。

设置环境变量后,为什么APT或Docker还是不能用?

环境变量只对会读取它的程序生效。APT、Docker CLI和Docker daemon可能使用独立配置层,应先用curl确认基础链路,再按具体程序的官方文档单独设置。

相关阅读

参考资料

  1. curl官方教程:代理环境变量、NO_PROXY与代理请求(curl.se)
  2. curl官方参数文档:HTTP、HTTPS、SOCKS5与SOCKS5H代理(curl.se)
  3. Debian APT官方手册:环境变量与专用代理配置(manpages.debian.org)
  4. Git官方常见问题:环境变量与Git代理配置(git-scm.com)
  5. Docker官方文档:daemon代理配置与CLI、daemon区别