haproxy实现七层负载均衡的核心在于基于http协议的应用层解析能力,可读取host、uri、cookie、header等字段进行业务逻辑分发;需显式定义frontend(监听端口、mode http、acl匹配)与backend(服务器池、算法、健康检查check、会话保持),通过use_backend关联,并启用http模式、合理选型算法(如roundrobin、leastconn)、配置安全策略与可观测性。

HAProxy 实现七层负载均衡,核心在于基于 HTTP 协议的应用层解析能力——它能读取 Host、URI、Cookie、Header 等字段,按业务逻辑把请求精准分发到不同后端服务,而不仅依赖 IP+端口。配置不复杂,但关键在 frontend/backend 结构设计、健康检查启用和算法选型。
明确 frontend 和 backend 分离结构
七层代理必须显式定义前端入口(接收客户端请求)和后端服务器池(真实服务节点),不能混写在 listen 块里(虽支持,但不利于维护和扩展)。
- frontend 负责监听端口、设置协议模式(mode http)、定义 ACL 规则或 host/path 匹配逻辑
- backend 定义服务器列表、负载算法、健康检查(check)、会话保持(如 cookie 插入)等
- 两者通过 use_backend 或 default_backend 关联,支持多域名、多路径路由
启用 HTTP 模式与基础健康检查
mode http 是七层工作的前提;仅设 mode tcp 会退化为四层转发,失去 URI/Host 解析能力。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 在 frontend 和 backend 中都需声明 mode http
- 每个 server 行加上 check 参数,HAProxy 默认每 5 秒发起 HTTP HEAD 请求探测(返回 200–399 视为健康)
- 可自定义检查:如 check inter 3s fall 2 rise 3 表示 3 秒检测一次,连续失败 2 次下线,连续成功 3 次上线
根据业务选择合适调度算法
算法决定请求如何分配,选错会导致负载不均或会话中断。
- roundrobin:默认轮询,适合无状态服务,简单均衡
- leastconn:优先发给当前连接数最少的节点,适合长连接(如 WebSocket、API 网关)
- source:客户端 IP 哈希固定后端,无需 Cookie 即可维持会话,但 NAT 环境下可能失准
- uri:对请求路径哈希(如 /api/user → 固定到 s1),利于 CDN 缓存一致性或静态资源分组
- hdr(Cookie):提取指定 Header(如 X-Forwarded-For)或 Cookie 值做哈希,适合灰度发布或租户隔离
添加基础安全与可观测性配置
生产环境不能只管转发,还要控制访问、记录行为、便于排障。
- 用 http-request deny if { path_beg /admin } !{ src 192.168.10.0/24 } 限制后台路径访问
- 开启日志:global 段加 log 127.0.0.1 local0,defaults 段加 option http-log,记录完整请求头与响应状态
- 启用 stats 页面:在 frontend 中加 stats uri /haproxy?stats + stats auth admin:pass,方便实时查看节点状态与流量分布










