Linux HAProxy 负载均衡高级配置

2次阅读

haproxy高级配置需调整配置文件实现会话保持、健康检查增强、ssl卸载、流量分流及日志追踪:一、backend中配置cookie serverid并为server指定cookie值;二、启用httpchk并设置检查路径、host头、超时与阈值;三、合并证书并绑定443端口,通过acl重定向http至https;四、用acl匹配路径或请求头,结合use_backend实现分流;五、启用rsyslog日志、自定义log-format并注入x-request-id。

Linux HAProxy 负载均衡高级配置

如果您正在使用 linux 系统部署 HAProxy 作为负载均衡器,但需要实现会话保持、健康检查增强、SSL 卸载或流量标记等高级功能,则需调整其配置文件中的特定参数。以下是实现这些高级配置的具体步骤:

一、启用基于 Cookie 的会话保持

通过在 backend 中插入 insert 或 rewrite 模式 cookie,可确保同一客户端后续请求被转发至同一后端服务器,避免应用层状态丢失。

1、编辑 HAProxy 配置文件,通常位于 /etc/haproxy/haproxy.cfg

2、在目标 backend 段落中添加如下行:cookie SERVERID insert indirect nocache

3、为每个 server 行追加 cookie 参数,例如:server web1 192.168.1.10:80 check cookie web1

4、重启服务:执行 systemctl restart haproxy

二、配置主动式 TCP 和 HTTP 健康检查

默认健康检查仅依赖 TCP 连通性,启用 HTTP 方式可验证后端应用实际响应能力,防止服务进程僵死但端口仍开放的情况。

1、在 backend 中添加 option httpchk GET /health 启用 HTTP 检查路径。

2、指定检查使用的 HTTP 版本与 Host 头:http-check send hdr Host www.example.com

3、设置检查间隔与超时:timeout check 5sinter 3s fall 3 rise 2

4、确认后端服务器的 /health 路径返回 HTTP 200 状态码且无重定向。

三、实现 SSL 卸载并强制 HTTPS 重定向

将 TLS 解密工作交由 HAProxy 承担,减轻后端服务器压力,同时统一管理证书;并通过 301 重定向确保所有 HTTP 流量转为加密连接。

1、将 PEM 格式证书与私钥合并为单个文件:cat example.com.crt example.com.key > /etc/haproxy/certs/example.com.pem

2、在 frontend 中绑定 SSL 端口并加载证书:bind *:443 ssl crt /etc/haproxy/certs/example.com.pem

3、添加 ACL 判断非 HTTPS 请求:acl is_http proto http

4、插入重定向规则:redirect scheme https if is_http

四、基于请求头或路径的流量分流

利用 HAProxy 的 ACL 机制,可根据 Host、User-Agent、URL 路径等字段将流量分发至不同 backend,实现灰度发布或 API 版本路由。

1、定义 ACL 匹配规则,例如:acl is_v2_path path_beg /api/v2/

2、定义另一 ACL 匹配移动端请求:acl is_mobile hdr_sub(User-Agent) Mobile

3、在 frontend 中使用 use_backend 指向对应 backend:use_backend api_v2 if is_v2_path

4、添加默认 backend:default_backend web_default

五、启用日志记录并关联请求 ID

开启详细访问日志有助于故障排查,而注入唯一 X-Request-ID 可贯穿整个请求链路,便于跨服务追踪。

1、在 global 段落中启用日志输出:log /dev/log local0log-tag haproxy

2、在 defaults 或 frontend 中添加日志格式:option httploglog-format %ci:%cp [%t] %ft %b/%s %Tq %Tw %Tc %tr %Ta %ST %B %CC %CS %tsc %ac %fc %bc %sc %rc %sq %qq %hr %hs %{+Q}r

3、在 frontend 中插入请求 ID 头:http-request set-header X-Request-ID %[uuid(1)]

4、确保 rsyslog 已配置接收 local0 设备日志,并写入指定文件路径。

text=ZqhQzanResources