配置 Linux 代理服务器主要分为两种角色:

- 作为客户端:让你的 Linux 机器通过一个代理服务器去访问互联网。
- 作为服务器:在你的 Linux 机器上搭建一个代理服务,供其他设备使用。
下面我们详细讲解这两种场景。
将 Linux 作为客户端,使用代理服务器
当你身处一个网络环境(例如公司内网、学校机房)需要通过代理才能上网时,就需要配置客户端代理,这通常分为临时和永久两种方式。
临时设置(仅对当前终端会话有效)
这种方式适用于临时测试或只需要在当前终端使用代理的场景。
设置代理:

使用 export 命令设置 http_proxy 和 https_proxy 环境变量,由于现在大部分网站都使用 HTTPS,https_proxy 是必须的。
# 格式: export 变量名="http://代理服务器IP:端口号" export http_proxy="http://proxy.example.com:8080" export https_proxy="http://proxy.example.com:8080" # 如果代理需要用户名和密码 export http_proxy="http://username:password@proxy.example.com:8080" export https_proxy="http://username:password@proxy.example.com:8080" # 如果代理是 SOCKS5 代理 (常用于翻墙工具) export all_proxy="socks5://127.0.0.1:1080" # 设置所有协议都走这个SOCKS5代理
取消设置:
关闭当前终端或使用 unset 命令取消。
unset http_proxy unset https_proxy unset all_proxy
验证设置:
你可以使用 curl 或 wget 命令来测试是否成功通过代理访问网络。
# curl 会自动使用 http_proxy 和 https_proxy 环境变量 curl -v https://www.google.com # 或者查看环境变量本身 echo $http_proxy echo $https_proxy
永久设置(对所有用户和所有服务有效)
这种方式需要修改系统的环境变量配置文件。
修改 /etc/environment (推荐,对所有用户生效)
这个文件会在系统启动时被读取,为所有用户设置环境变量。
- 使用
sudo和文本编辑器(如vim或nano)打开文件。sudo vim /etc/environment
- 在文件中添加以下内容(注意:这里不要使用
export关键字):http_proxy="http://proxy.example.com:8080" https_proxy="http://proxy.example.com:8080" # ftp_proxy="http://proxy.example.com:8080" # 如果需要FTP代理
- 保存文件后,注销并重新登录,或者重启系统,使配置生效。
修改 /etc/profile 或 /etc/profile.d/proxy.sh (对所有用户生效)
- 创建一个新的配置文件,
sudo vim /etc/profile.d/proxy.sh
- 添加
export语句:export http_proxy="http://proxy.example.com:8080" export https_proxy="http://proxy.example.com:8080"
- 保存后,执行
source /etc/profile或重启使配置生效。
修改 ~/.bashrc 或 ~/.zshrc (仅对当前用户生效)
这是最常用的个人配置方式。
- 打开你的 shell 配置文件:
vim ~/.bashrc
- 在文件末尾添加
export语句:export http_proxy="http://proxy.example.com:8080" export https_proxy="http://proxy.example.com:8080"
- 保存文件后,执行
source ~/.bashrc使配置在当前终端立即生效。
为特定应用程序设置代理
有些程序(如 git, apt, yum, docker)不一定会读取上述环境变量,它们有自己的配置方式。
-
Git:
git config --global http.proxy "http://proxy.example.com:8080" git config --global https.proxy "http://proxy.example.com:8080" # 取消设置 git config --global --unset http.proxy git config --global --unset https.proxy
-
APT (Debian/Ubuntu): 编辑
/etc/apt/apt.conf.d/proxy.conf文件(如果不存在则创建):Acquire::http::Proxy "http://proxy.example.com:8080"; Acquire::https::Proxy "http://proxy.example.com:8080";
-
DNF/YUM (RHEL/CentOS/Fedora): 创建或编辑
/etc/yum.conf文件,在[main]部分添加:[main] proxy=http://proxy.example.com:8080 proxy_username=username proxy_password=password
-
Docker: 创建或编辑
~/.docker/config.json文件:{ "proxies": { "default": { "httpProxy": "http://proxy.example.com:8080", "httpsProxy": "http://proxy.example.com:8080", "noProxy": "localhost,127.0.0.1,*.example.com" } } }
将 Linux 作为代理服务器
如果你想在自己的 Linux 服务器上搭建一个代理服务,供局域网内的其他设备使用,可以选择以下几种软件。
Squid - 经典的 Web 代理缓存服务器
Squid 是功能最强大、最成熟的代理服务器软件,支持 HTTP, HTTPS, FTP 等协议,并带有缓存功能,可以加速访问。
安装:
# Debian/Ubuntu sudo apt update sudo apt install squid # CentOS/RHEL/Fedora sudo yum install squid
配置:
主要配置文件是 /etc/squid/squid.conf,建议先备份原文件。
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak sudo vim /etc/squid/squid.conf
关键配置项:
-
设置监听端口和 IP:
# 默认监听所有IP的3128端口 http_port 3128
-
设置访问控制(ACL)和规则: 这是最重要的部分,定义谁可以访问代理。
# 定义一个名为 'localnet' 的ACL,允许来自 192.168.1.0/24 网段的主机 acl localnet src 192.168.1.0/24 # 定义一个名为 'safe_ports' 的ACL,允许访问的端口 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports # 默认拒绝所有 http_access deny !Safe_ports # 默认拒绝连接到SSL端口 http_access deny CONNECT !SSL_ports # 允许 'localnet' 网段访问 http_access allow localnet # 允许来自本地机器的访问 http_access allow localhost # 最后一条规则,拒绝所有其他访问 http_access deny all
-
设置缓存(可选):
# 设置缓存目录大小和路径 cache_dir ufs /var/spool/squid 100 16 256
-
设置上游代理(可选): 如果你的服务器本身也需要通过另一个代理上网,可以这样设置:
cache_peer parent_proxy.example.com parent 3128 0 no-query default # never_direct allow all
启动和管理服务:
# 启动服务 sudo systemctl start squid # 设置开机自启 sudo systemctl enable squid # 查看状态 sudo systemctl status squid # 重启以应用配置 sudo systemctl restart squid # 查看日志 sudo tail -f /var/log/squid/access.log sudo tail -f /var/log/squid/cache.log
客户端配置:
其他设备只需将 HTTP/HTTPS 代理地址设置为你的 Linux 服务器的 IP 和端口(168.1.100:3128)即可。
Nginx - 反向代理服务器
Nginx 本身是一个高性能的 Web 服务器和反向代理,但也可以通过配置 ngx_http_proxy_connect_module 模块来实现正向代理功能(支持 HTTPS),这种方式更灵活,常用于隧道穿透。
安装 (需要带 proxy_connect 模块的 Nginx):
这通常需要从源码编译安装,或者使用第三方仓库,在 Ubuntu 上可以使用 nginx-extras。
sudo apt install nginx-extras
配置示例:
这是一个简单的 HTTPS 代理配置示例。
# /etc/nginx/nginx.conf 或 sites-available/default
server {
listen 3128; # 代理监听端口
# 支持 HTTP 代理
location / {
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启动和管理:
与 Squid 类似,使用 systemctl 管理。
sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl restart nginx
TinyProxy - 轻量级 HTTP 代理
如果你只需要一个简单的、无需配置的 HTTP 代理,TinyProxy 是一个很好的选择,它非常轻量,配置简单。
安装:
# Debian/Ubuntu sudo apt install tinyproxy # CentOS/RHEL/Fedora sudo yum install tinyproxy
配置:
配置文件是 /etc/tinyproxy/tinyproxy.conf。
- 修改
Port指令设置监听端口。 - 修改
Allow指令允许访问的客户端 IP 网段,默认是Allow 127.0.0.1,只允许本机。Port 8888 Allow 192.168.1.0/24 # 允许整个局域网
- 默认不记录日志,如果想开启,可以修改
LogLevel为Info或Notice。
启动和管理:
sudo systemctl start tinyproxy sudo systemctl enable tinyproxy
总结与对比
| 特性 | Squid | Nginx (带模块) | TinyProxy |
|---|---|---|---|
| 主要用途 | 功能全面的 Web 代理、缓存 | 高性能 Web 服务器、反向代理、正向代理 | 简单、轻量级的 HTTP 代理 |
| 配置复杂度 | 较高,功能强大导致配置项多 | 中等,需要额外模块支持 HTTPS | 非常简单,开箱即用 |
| 性能 | 高,带缓存,性能优异 | 极高,事件驱动模型 | 一般,适合小规模使用 |
| 功能 | HTTP, HTTPS, FTP, 认证, ACL, 缓存, 访问日志 | HTTP, HTTPS (需模块), 负载均衡, 反向代理 | 仅 HTTP,无缓存,功能基础 |
| 适用场景 | 企业级代理、内容加速、需要精细控制的网络 | 高并发场景、需要同时作为 Web 服务器和代理 | 个人使用、小型团队、快速部署 |
| 推荐度 | ⭐⭐⭐⭐⭐ (功能最全) | ⭐⭐⭐⭐ (高性能,适合特定需求) | ⭐⭐⭐ (简单易用) |
如何选择?
- 作为客户端:根据需求选择
export、修改系统环境文件或为特定软件单独配置。 - 作为服务器:
- 如果你需要一个功能强大、可定制、带缓存的代理,首选 Squid。
- 如果你的服务器上已经运行了 Nginx,或者你需要极高的性能和灵活性,可以考虑 Nginx + proxy_connect_module。
- 如果你只是想快速搭一个最简单的代理给几个人用,TinyProxy 是最省心的选择。
