首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 Debian 12 上安装和简单配置 HAProxy

在 Debian 12 上安装和简单配置 HAProxy

作者头像
一根头发丝的宽度
发布2026-05-06 19:22:40
发布2026-05-06 19:22:40
1400
举报
haproxy - Official Image | Docker Hub
haproxy - Official Image | Docker Hub

HAProxy(高可用性代理)是一个免费、非常快速且可靠的解决方案,为基于 TCP 和 HTTP 的应用程序提供高可用性、负载均衡和代理功能。它特别适合流量极高的网站,并为世界上许多访问量最大的网站提供支持。它具有通过 HTTP Cookie 实现的连接持久性、负载均衡、双向的请求头和响应头的添加、修改和删除功能。它还具备请求阻断能力,并提供显示服务器状态的界面。

本文将通过实践演示在 Debian 12 系统上安装最新稳定版 HAProxy 3.2,并进行基本配置,实现后端应用的负载均衡与健康检查,同时启用状态监控界面。

在 Debian 12 上安装 HAProxy

HAProxy 在 Debian 12 的默认软件仓库中可用。但是,可用的软件包可能不是最新的。

代码语言:javascript
复制
apt show haproxy

输出示例:

默认仓库提供的是 2.6.12 版本,而当前最新稳定版是 3.2.3。

安装最新版 HAProxy

访问:https://haproxy.debian.net/ 根据系统查找需要版本号并加入到软件安装源。

代码语言:javascript
复制
# 需要提前安装 curl 软件:apt install curl -y
curl https://haproxy.debian.net/haproxy-archive-keyring.gpg \
      > /usr/share/keyrings/haproxy-archive-keyring.gpg
echo deb "[signed-by=/usr/share/keyrings/haproxy-archive-keyring.gpg]" \
      http://haproxy.debian.net bookworm-backports-3.2 main \
      > /etc/apt/sources.list.d/haproxy.list

更新软件并安装 Haproxy 3.2 版本

代码语言:javascript
复制
apt update
apt install haproxy=3.2.\* # 这将安装 3.2 版本下的最新版本
haproxy -v  # 验证安装版本

输出示例:

配置 HAProxy 负载均衡器

使用 HAProxy,您可以定义多个代理服务并配置 HAProxy 为这些代理的流量进行负载均衡。代理由前端系统和一或多个后端系统组成。前端系统定义了代理监听的 IP 地址和端口,以及用于特定代理的后端系统。

HAProxy 的主配置文件是 /etc/haproxy/haproxy.cfg

HAProxy 配置文件由四个主要部分组成:

  1. global (全局): 全局部分定义了影响 HAProxy 底层的进程级安全性和性能调优参数。
  2. defaults (默认): 默认部分定义了应用于所有前端 (frontend) 和后端 (backend) 部分的配置设置。您可以定义多个默认部分,但后续的默认部分会覆盖之前的设置。
  3. frontend (前端): 当 HAProxy 用作反向代理时,前端部分定义了客户端可以连接到的 IP 地址和端口(即 HAProxy 服务器自身的监听地址和端口)。
  4. backend (后端): 后端部分定义了将被负载均衡并分配处理请求的服务器组。

前端和后端部分可以使用 listen 部分合并。listen 部分也可用于提供 HAProxy 统计信息页面。

默认的 HAProxy 配置文件内容如下(过滤掉了注释行):

代码语言:javascript
复制
grep -v '^\s*#' /etc/haproxy/haproxy.cfg

输出示例:

代码语言:javascript
复制
global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http

在我们的配置文件中,将修改上述内容以包含前端 (frontend) 和后端 (backend) 部分。

在继续之前,请备份默认配置文件后再打开文件:

代码语言:javascript
复制
cp /etc/haproxy/haproxy.cfg{,.factory}
vi /etc/haproxy/haproxy.cfg
定义 HAProxy 前端配置

如前所述,前端部分定义了客户端可以连接到的 IP 地址和端口(HAProxy 服务器本身的 IP 地址和端口)。因此,我们的前端配置如下:

代码语言:javascript
复制
frontend oneh
        bind 192.168.2.218:80 # ssl crt /etc/ssl/certs/haproxy.pem
        default_backend webapps
        option forwardfor
  • bind: 在前端服务器中定义一个或多个监听地址和/或端口。
  • ssl crt: 配置 HAProxy 的 SSL/TLS 终止(SSL Termination),并指定 SSL/TLS 证书的路径。
  • default_backend: 指定当没有匹配任何 "use_backend" 规则时使用的后端。
  • option forwardfor: HAProxy 以反向代理模式运行。此选项使后端服务器能够看到客户端的真实 IP 地址,而不是 HAProxy 服务器的 IP 地址。

注意:在此演示中,我们的代理后端未使用 SSL/TLS 证书。如需使用,需要在 HAProxy 上配置 SSL/TLS 证书作为终止点(SSL Termination),而不是在每个后端应用程序上配置终止其 SSL/TLS 连接(SSL Passthrough)。

定义 HAProxy 后端配置

在本节中,我们将以基本形式定义 HAProxy 的调度算法以及被代理/负载均衡的后端服务器。

代码语言:javascript
复制
backend webapps
        balance roundrobin
        server  webapp01    127.0.0.1:8081 check
        server  webapp02    127.0.0.1:8082 check
  • balance 参数定义了负载均衡器的调度算法。
    • roundrobin 轮询选择服务器。
    • 其他常见算法包括 leastconn,它使负载均衡器将请求转发给连接数最少的服务器。
  • server 设置指定后端可用的服务器。
    • check 选项启用对服务器的健康检查,这样如果其中一台服务器宕机,请求将被定向到可用的后端服务器。
    • webapp01/02 为我在后台创建的两个web服务器测试容器。
定义 HAProxy 统计信息配置

根据 HAProxy 统计页面文档,HAProxy 附带了一个称为 HAProxy 统计页面(Stats Page)的仪表板,它显示了大量的指标,涵盖服务器健康状况、当前请求速率、响应时间等。这些指标提供了按前端、后端和服务器细分的详细数据。这可以通过 stats enable 指令启用,该指令可以添加到 frontendlisten 部分。本实践中我们使用 listen 部分。

代码语言:javascript
复制
listen stats
        bind 192.168.2.218:8443 # ssl crt /etc/ssl/certs/haproxy.pem
        stats enable                    # 启用统计报告
        stats hide-version              # 隐藏 HAProxy 的版本号
        stats refresh 30s               # 统计信息刷新时间间隔 (30秒)
        stats show-node                 # 显示节点的主机名
        stats auth haadmin:P@ssword     # 为统计页面启用基本身份验证
        stats uri /stats                # 统计信息的访问URI (URL路径)

请注意,行 bind 192.168.2.218:8443 # ssl crt /etc/ssl/certs/haproxy.pem 定义了访问 HAProxy 统计信息的前端 IP 和端口,以及要使用的 SSL/TLS 证书(本文实践并未使用)。

完成配置后保存并退出文件。

总的来说,我们的整体配置如下所示。注意如果使用SSL需要在 SSL/TLS 配置选项部分添加行 tune.ssl.default-dh-param 2048

代码语言:javascript
复制
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
        tune.ssl.default-dh-param 2048  # 如果配置了SSL请添加此行

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend oneh
        bind 192.168.2.218:443 # ssl crt /etc/ssl/certs/haproxy.pem
        default_backend webapps
        option forwardfor

backend webapps
        balance roundrobin
        server  webapp01    192.168.2.231:80 check
        server  webapp02    192.168.2.232:80 check

listen stats
        bind 192.168.2.218:8443 # ssl crt /etc/ssl/certs/haproxy.pem
        stats enable                    # 启用统计报告
        stats hide-version              # 隐藏 HAProxy 的版本号
        stats refresh 30s               # 统计信息刷新时间间隔 (30秒)
        stats show-node                 # 显示节点的主机名
        stats auth haadmin:P@ssword     # 为统计页面启用基本身份验证
        stats uri /stats                # 统计信息的访问URI (URL路径)
验证 HAProxy 配置语法

配置完成后,在启动 HAProxy 之前运行以下命令来验证配置语法:

代码语言:javascript
复制
sudo haproxy -f /etc/haproxy/haproxy.cfg -c -V

如果一切正常,您应该会看到输出:

否则,您会在标准输出上看到错误信息。请务必在继续之前修复这些错误。

运行 HAProxy

安装后,HAProxy 默认已启动并设置为开机自启。您可以通过运行以下命令重启它并查看状态:

代码语言:javascript
复制
systemctl restart haproxy  && systemctl status haproxy

输出示例:

如果 UFW 防火墙正在运行,请开放端口 443 以及统计信息端口:

代码语言:javascript
复制
sudo ufw allow 443/tcp
sudo ufw allow 8443/tcp

在 Debian 12 上验证 HAProxy 负载均衡设置

现在可以通过浏览器访问 HAProxy 来确认 LB 设置。 使用地址 http[s]://lb-server-IP

第一页显示的内容来自第一个定义的后端,在本演示中为 webserver01。 请记住这里使用的 LB 算法:roundrobin。

快速点击“刷新”按钮将会看到在webserver01/02间来回切换。

还可以通过 http[s]://lb-server-IP[:port]/stats 查看 HAProxy 的统计数据。 如果启用了基本身份验证,系统会提示输入用户和密码。

下图便是haproxy的统计数据:

结语

至此,您已在 Debian 12 上成功部署并配置了 HAProxy 负载均衡器。通过访问应用地址,可以验证请求已在后端服务器间轮询分发;通过统计页面,可实时监控服务器状态与流量。

延伸阅读: 后续可探索 HTTPS 优化、访问控制列表 (ACL) 等高级配置以进一步增强 HAProxy 功能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在 Debian 12 上安装 HAProxy
    • 安装最新版 HAProxy
  • 配置 HAProxy 负载均衡器
    • 定义 HAProxy 前端配置
    • 定义 HAProxy 后端配置
    • 定义 HAProxy 统计信息配置
    • 验证 HAProxy 配置语法
    • 运行 HAProxy
  • 在 Debian 12 上验证 HAProxy 负载均衡设置
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档