凌峰创科服务平台

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

  1. 在 Linux 上搭建一个代理服务器:让其他设备通过你的 Linux 机器上网。
  2. 配置 Linux 本身使用一个代理服务器:让你的 Linux 机器通过另一台代理服务器上网。

我会分别详细介绍这两种情况。

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

在 Linux 上搭建代理服务器

最常用、功能最强大的开源代理服务器是 Squid,它功能全面,性能稳定,支持 HTTP, HTTPS, FTP 等多种协议,这里我们以 Squid 为例进行讲解。

安装 Squid

大多数 Linux 发行版的软件源中都包含 Squid。

对于 Debian/Ubuntu:

sudo apt update
sudo apt install squid

对于 CentOS/RHEL/Fedora:

Linux如何搭建HTTP代理服务器?-图2
(图片来源网络,侵删)
sudo yum install squid
# 或者对于较新版本
sudo dnf install squid

基本配置

Squid 的主配置文件是 /etc/squid/squid.conf,在修改之前,最好先备份一份。

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

我们使用 vimnano 等编辑器来修改配置文件。

sudo nano /etc/squid/squid.conf

以下是一些核心配置项的解释:

  • http_port: 定义 Squid 监听的端口和地址,默认是 3128

    Linux如何搭建HTTP代理服务器?-图3
    (图片来源网络,侵删)
    # 默认配置,只监听本机的 3128 端口
    http_port 3128
    # 如果想让局域网内其他设备也能使用,可以改成监听所有接口
    # http_port 0.0.0.0:3128
  • visible_hostname: 设置代理服务器的可见主机名,方便在日志中识别。

    visible_hostname MyProxyServer
  • cache_dir: 定义缓存目录和大小,如果只是作为简单的转发代理,可以禁用缓存以提升性能。

    # 默认是开启缓存的
    # cache_dir ufs /var/spool/squid 100 16 256
    # 如果不需要缓存,可以注释掉这行
  • acl (Access Control List) 和 http_access: 这是 Squid 安全控制的核心。acl 定义规则,http_access 应用规则。

    示例:只允许特定 IP 或网段使用代理

    # 定义一个名为 "localnet" 的规则,包含 192.168.1.0/24 网段
    acl localnet src 192.168.1.0/24
    # 默认拒绝所有连接
    http_access deny all
    # 允许 "localnet" 网段的用户访问
    http_access allow localnet

    示例:设置用户名密码认证

    1. 安装 apache2-utils (它包含 htpasswd 工具):

      sudo apt install apache2-utils
    2. 创建密码文件:

      # -c 表示创建新文件,user1 是用户名
      sudo htpasswd -c /etc/squid/passwd user1
      # 系统会提示你输入并确认密码
      # 添加第二个用户时,不要用 -c,否则会覆盖原文件
      sudo htpasswd /etc/squid/passwd user2
    3. 修改 Squid 配置: 在 squid.conf 中添加以下配置:

      # 定义认证程序
      auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
      auth_param basic children 5
      auth_param basic realm Squid Proxy Authentication
      auth_param basic credentialsttl 2 hours
      # 定义一个需要认证的 ACL
      acl auth_users proxy_auth REQUIRED
      # 应用认证规则:允许通过认证的用户访问
      http_access allow auth_users
      # 确保在 deny all 之前
      http_access deny all

启动并设置开机自启

配置完成后,启动 Squid 服务并设置为开机自启。

# 启动服务
sudo systemctl start squid
# 设置开机自启
sudo systemctl enable squid
# 检查服务状态
sudo systemctl status squid

如果遇到问题,可以查看日志:

# 实时查看日志
sudo tail -f /var/log/squid/access.log
sudo tail -f /var/log/squid/cache.log

防火墙设置

如果你的服务器启用了防火墙(如 ufwfirewalld),需要开放 Squid 使用的端口(默认为 3128)。

使用 UFW (Ubuntu/Debian):

sudo ufw allow 3128/tcp

使用 Firewalld (CentOS/RHEL/Fedora):

sudo firewall-cmd --permanent --add-port=3128/tcp
sudo firewall-cmd --reload

你的代理服务器就搭建完成了!你可以在浏览器或其他应用中设置代理服务器地址为你的 Linux 机器的 IP,端口为 3128,如果配置了认证,还需要输入用户名和密码。


配置 Linux 本身使用代理服务器

当你需要让 Linux 系统的所有网络流量(包括 apt, yum, curl, wget 等)都通过一个代理服务器时,可以进行如下配置。

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

这种方式最简单,但关闭终端后失效。

设置 HTTP 和 HTTPS 代理:

export http_proxy="http://proxy_server_ip:port"
export https_proxy="http://proxy_server_ip:port"

示例:

export http_proxy="http://192.168.1.100:3128"
export https_proxy="http://192.168.1.100:3128"

如果代理需要用户名和密码:

export http_proxy="http://username:password@proxy_server_ip:port"
export https_proxy="http://username:password@proxy_server_ip:port"

示例:

export http_proxy="http://user1:mypassword@192.168.1.100:3128"
export https_proxy="http://user1:mypassword@192.168.1.100:3128"

取消临时代理:

unset http_proxy https_proxy

永久设置(推荐)

为了让配置对所有用户和所有程序都生效,可以修改系统的环境变量配置文件。

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

使用 sudo 编辑 /etc/environment 文件,添加以下内容:

sudo nano /etc/environment

在文件中添加:

http_proxy="http://proxy_server_ip:port"
https_proxy="http://proxy_server_ip:port"
# 如果需要,也加上 ftp_proxy
ftp_proxy="http://proxy_server_ip:port"

注意:这里的值不要用单引号,用双引号。

修改后,需要重启系统或重新登录才能使配置完全生效。

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

编辑你当前用户的主目录下的配置文件:

nano ~/.bashrc

在文件末尾添加:

export http_proxy="http://proxy_server_ip:port"
export https_proxy="http://http://proxy_server_ip:port"
export ftp_proxy="http://proxy_server_ip:port"

然后执行以下命令使配置立即生效(无需重启):

source ~/.bashrc

为特定程序设置代理

你可能只想让某个特定的程序使用代理,而不是整个系统。

  • 对于 apt (Debian/Ubuntu): 创建或编辑 /etc/apt/apt.conf.d/proxy.conf 文件:

    sudo nano /etc/apt/apt.conf.d/proxy.conf
    Acquire::http::Proxy "http://proxy_server_ip:port";
    Acquire::https::Proxy "http://proxy_server_ip:port";
  • 对于 yumdnf (CentOS/RHEL/Fedora): 创建或编辑 /etc/yum.conf 文件,在 [main] 部分添加:

    sudo nano /etc/yum.conf
    [main]
    ...
    proxy=http://proxy_server_ip:port
    proxy_username=user1
    proxy_password=mypassword
  • 对于 git:~/.gitconfig 文件中添加:

    [http]
        proxy = http://proxy_server_ip:port
    [https]
        proxy = http://proxy_server_ip:port
  • 对于 wget:~/.wgetrc 文件中添加:

    use_proxy = on
    http_proxy = http://proxy_server_ip:port
    https_proxy = http://proxy_server_ip:port
任务 推荐工具/方法 关键点
搭建代理服务器 Squid 配置 /etc/squid/squid.conf,使用 aclhttp_access 控制访问,可用 htpasswd 实现认证。
临时使用代理 export 命令 在终端中设置,仅对当前会话有效。
永久使用代理 修改 /etc/environment~/.bashrc /etc/environment 对所有用户生效,~/.bashrc 仅对当前用户生效。
为特定程序设置代理 修改该程序的配置文件 apt.conf, yum.conf, gitconfig, wgetrc 等。

希望这份详细的指南能帮助你顺利地在 Linux 上配置和使用代理服务器!

分享:
扫描分享到社交APP
上一篇
下一篇