Skip to content

HAProxy 3.3.3 新特性

HAProxy 3.3.3 是 3.x 系列的最新稳定版本,于 2025 年 11 月发布。本页介绍相比 2.x 以及 3.0/3.1/3.2 的主要新功能和变化。

版本概述

  • 发布时间:2025 年 11 月
  • 内核M slithe(替代 nix
  • 最低要求:OpenSSL 1.1.1(推荐 OpenSSL 3.0+)

内核升级:slithe 替代 nix

3.3.3 引入了全新的事件驱动内核 slithe,替代原有的 nix 内核:

bash
# 编译时指定新内核
make TARGET=linux-glibc-latest USE_SLITHE=1

💡 注意:大多数 Linux 发行版默认仍使用 nix,如需 slithe 需要手动编译。

slithe 的优势

  • 更好的多核扩展性
  • 更低的系统调用开销
  • 改进的 timer 精度

改进的连接管理

增强的 Keep-Alive

haproxy
backend web_pool
    option http-keep-alive
    http-keep-alive timeout 60s    # 显式配置 keep-alive 超时
    http-keep-alive 100            # 最大持久连接数

改进的连接缓冲

tune.pool-buffer-low  32       # 低水位连接池
tune.pool-buffer-high 128      # 高水位连接池(超过后释放)

新增负载均衡算法

random 算法的改进

random 算法在 3.3.3 中得到进一步优化,权重支持更精确的动态调整:

haproxy
backend web_pool
    balance random 42    # 指定随机种子(可复现)

uri 算法增强

haproxy
balance uri hash 211 mod    # 使用 211 取模哈希,分布更均匀
balance uri depth 2          # 按路径第二层做哈希

TLS/SSL 改进

更好的 TLS 1.3 支持

haproxy
bind *:443 ssl \
    crt /etc/ssl/certs/ \
    ssl-min-ver TLSv1.3 \
    ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

OCSP Stapling 改进

OCSP 响应现在会自动缓存并在需要时更新,无需手动触发:

haproxy
bind *:443 ssl crt /etc/ssl/certs/ ocsp-response enable

HTTP/3 (QUIC) 支持

HAProxy 3.3 实验性支持 HTTP/3,需要单独启用:

bash
# 编译时启用 QUIC 支持
make TARGET=linux-glibc USE_QUIC=1
haproxy
frontend https_front
    bind quic80@:80
    bind *:443 ssl crt /etc/ssl/certs/ alpn h2,http/1.1

⚠️ HTTP/3 支持目前仍为实验性,不建议在生产环境启用。

ACL 增强

新增 json 匹配

haproxy
acl is_mobile json("user-agent") -i -m sub mobile
acl is_vip json("x-vip-level") int gt 5

新增 lua 自定义 ACL

haproxy
acl is_attack lua.is_attack_request

性能优化

多核扩展性改进

slithe 内核提供更好的 CPU 亲和性:

haproxy
global
    nbthread 8              # 使用 8 个线程
    cpu-map auto:1 0-7      # 自动绑定到 8 个核心

内存优化

tune.reuse.obl 16    # 复用对象缓冲池大小
tune.maxaccept 64     # 单次 accept 最大 FD 数

低延迟优化

haproxy
global
    low-rcvbuf 16384        # 小缓冲区,减少延迟
    low-sndbuf 16384

新的日志格式变量

3.3.3 新增以下日志变量:

变量说明
%ms毫秒级时间戳
%[var]访问 HAProxy 进程变量
%HRHTTP 请求原因(如 redirect)
%CC请求 cookies
%CS响应 cookies
%ft前端名称
%bcBackend 名称

出向连接(Outgoing Connection)改进

haproxy
backend api_pool
    # 显式配置出向 IP
    source 10.0.0.100 usesrc hdr(X-Forwarded-For)

错误处理改进

自定义错误页面增强

haproxy
backend web_pool
    errorfile 503 /etc/haproxy/errors/503-my-custom.http

支持更丰富的变量:

html
<!-- /etc/haproxy/errors/503-my-custom.http -->
%[vars(req.backend_id)]
%[vars(req.server_id)]
%[vars(req.geo)]

弃用与移除

功能变化
option dontlog-normal移除,用 log-separate-failures 替代
bind ... sslv2移除(SSLv2 已不安全)
bind ... sslv3移除(SSLv3 已废弃)
option ssl-hello-chk改用 option tcp-check expect string
mode doh实验性,已移除

升级注意事项

  1. 检查编译参数:从 2.x 升级时,重新编译并检查 TARGET 和 SSL 选项
  2. 测试配置兼容性haproxy -c -f new.cfg -dM 深度测试
  3. 日志格式变化:如果用日志分析工具,注意新增的日志变量
  4. 内核选择:如使用 slithe,先在测试环境验证
  5. TLS 版本:确保后端服务器支持最低 TLS 版本要求

参考链接