凌峰创科服务平台

Linux HTTP代理服务器如何搭建与配置?

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

Linux HTTP代理服务器如何搭建与配置?-图1
(图片来源网络,侵删)
  1. 作为客户端:让你的 Linux 机器通过一个代理服务器去访问互联网。
  2. 作为服务器:在你的 Linux 机器上搭建一个代理服务,供其他设备使用。

下面我们详细讲解这两种场景。


将 Linux 作为客户端,使用代理服务器

当你身处一个网络环境(例如公司内网、学校机房)需要通过代理才能上网时,就需要配置客户端代理,这通常分为临时永久两种方式。

临时设置(仅对当前终端会话有效)

这种方式适用于临时测试或只需要在当前终端使用代理的场景。

设置代理:

Linux HTTP代理服务器如何搭建与配置?-图2
(图片来源网络,侵删)

使用 export 命令设置 http_proxyhttps_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

验证设置:

你可以使用 curlwget 命令来测试是否成功通过代理访问网络。

# curl 会自动使用 http_proxy 和 https_proxy 环境变量
curl -v https://www.google.com
# 或者查看环境变量本身
echo $http_proxy
echo $https_proxy

永久设置(对所有用户和所有服务有效)

这种方式需要修改系统的环境变量配置文件。

修改 /etc/environment (推荐,对所有用户生效)

这个文件会在系统启动时被读取,为所有用户设置环境变量。

  1. 使用 sudo 和文本编辑器(如 vimnano)打开文件。
    sudo vim /etc/environment
  2. 在文件中添加以下内容(注意:这里不要使用 export 关键字):
    http_proxy="http://proxy.example.com:8080"
    https_proxy="http://proxy.example.com:8080"
    # ftp_proxy="http://proxy.example.com:8080" # 如果需要FTP代理
  3. 保存文件后,注销并重新登录,或者重启系统,使配置生效。

修改 /etc/profile/etc/profile.d/proxy.sh (对所有用户生效)

  1. 创建一个新的配置文件,
    sudo vim /etc/profile.d/proxy.sh
  2. 添加 export 语句:
    export http_proxy="http://proxy.example.com:8080"
    export https_proxy="http://proxy.example.com:8080"
  3. 保存后,执行 source /etc/profile 或重启使配置生效。

修改 ~/.bashrc~/.zshrc (仅对当前用户生效)

这是最常用的个人配置方式。

  1. 打开你的 shell 配置文件:
    vim ~/.bashrc
  2. 在文件末尾添加 export 语句:
    export http_proxy="http://proxy.example.com:8080"
    export https_proxy="http://proxy.example.com:8080"
  3. 保存文件后,执行 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

关键配置项:

  1. 设置监听端口和 IP:

    # 默认监听所有IP的3128端口
    http_port 3128
  2. 设置访问控制(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
  3. 设置缓存(可选):

    # 设置缓存目录大小和路径
    cache_dir ufs /var/spool/squid 100 16 256
  4. 设置上游代理(可选): 如果你的服务器本身也需要通过另一个代理上网,可以这样设置:

    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 # 允许整个局域网
  • 默认不记录日志,如果想开启,可以修改 LogLevelInfoNotice

启动和管理:

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 是最省心的选择。
分享:
扫描分享到社交APP
上一篇
下一篇