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

如果您正在使用 Linux 系统部署 HAProxy 作为负载均衡器,但需要实现会话保持、健康检查增强、SSL 卸载或流量标记等高级功能,则需调整其配置文件中的特定参数。以下是实现这些高级配置的具体步骤:
一、启用基于 Cookie 的会话保持
通过在 backend 中插入 insert 或 rewrite 模式 cookie,可确保同一客户端后续请求被转发至同一后端服务器,避免应用层状态丢失。
1、编辑 HAProxy 配置文件,通常位于 /etc/haproxy/haproxy.cfg。
2、在目标 backend 段落中添加如下行:cookie SERVERID insert indirect nocache。
3、为每个 server 行追加 cookie
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 5s 和 inter 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 local0 和 log-tag haproxy。
2、在 defaults 或 frontend 中添加日志格式:option httplog 和 log-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 设备日志,并写入指定文件路径。









