核心 · Key Idea
一句话:HAProxy 是 C 写的高性能负载均衡器,单实例可扛百万连接,同时支持 L4(TCP)和 L7(HTTP),健康检查、ACL、TLS 终止、stick table 这些做得比 nginx 更专业。
是什么#
frontend www
bind *:443 ssl crt /etc/ssl/site.pem alpn h2,http/1.1
default_backend app
backend app
balance leastconn
option httpchk GET /healthz
server s1 10.0.0.11:8080 check
server s2 10.0.0.12:8080 checkfrontend 收流量、backend 转后端 —— 概念非常清晰。
打个比方#
打个比方 · Analogy
HAProxy 像机场调度塔:实时看每条跑道的状态、流量、延迟,毫秒级决定下一架飞机走哪条跑道。专业、严谨、不出花活。
关键概念#
Frontend / Backend前端/后端
frontend 接客、backend 转发。一个 frontend 可挂多个 backend。
Balance 算法负载算法
roundrobin / leastconn / source / uri / hdr 等。
ACL条件规则
按 path / 头 / 方法做路由:use_backend api if { path_beg /api }。
Stick Table黏性表
做粘性会话 / 限流 / 防护,性能极高。
Health Check健康检查
可做 HTTP 检查(option httpchk)或 TCP 探测。
Runtime API运行时 API
Unix socket 接口动态摘节点 / 改权重,无需 reload。
怎么工作#
一个进程多线程模型,各 worker 独立处理连接。
实操要点#
haproxy -c -f config:先校验再 reload。reload用 socket 平滑生效,不掉连接。- TLS 终止性能:硬件辅助 + ECDSA 证书可让单台扛十万 TPS 握手。
- 慢启动 / 主备 / 全量切换:用
slowstart、backup关键字,做灰度 / 熔断很方便。 - Stats 页面:
stats uri /haproxy?stats—— 必须加密码,别裸暴露。 - TCP 模式:很适合反代 MySQL / Redis / Kafka 等非 HTTP 协议。
- HTTP/3 / QUIC:2.9+ 起内建,配
bind quic4@:443。
易混点#
HAProxy
专精 LB / 高级健康检查 / ACL。
L4 / L7 都强,stick table 很猛。
L4 / L7 都强,stick table 很猛。
nginx
Web 服务器 + 反代。
自身处理静态资源更顺手。
自身处理静态资源更顺手。