HAProxy中frontend与backend通过名称严格匹配关联:frontend用use_backend或default_backend指令按ACL规则将请求路由至同名backend,backend负责真实服务负载均衡,名称区分大小写且启动时校验。

HAProxy 中 frontend 和 backend 的关联,核心在于 流量路由规则:frontend 接收请求,通过 use_backend 或 default_backend 指令决定将请求转发给哪个 backend。
frontend 定义入口与匹配逻辑
frontend 块声明监听地址、端口、TLS 配置,并可设置 ACL(访问控制列表)用于条件判断。它本身不处理后端连接,只做“分发决策”。常见操作包括:
- 用
bind :80或bind :443 ssl crt /path.pem开放入口 - 用
acl is_api path_beg /api定义匹配规则 - 用
use_backend bk_api if is_api将符合条件的请求导向指定 backend - 未被显式匹配的请求,由
default_backend bk_default托底处理
backend 定义真实服务与负载策略
backend 块描述一组后端服务器(server 行),并配置健康检查、负载均衡算法(如 roundrobin、leastconn)、连接超时等。它不感知前端来源,只专注如何把请求发给下游服务。
- 每个
server可带权重、备份标识(backup)、健康检查参数(check inter 3s fall 3 rise 2) - 支持基于 cookie 的会话保持(
cookie SERVERID insert indirect nocache) - 可通过
http-request set-header在转发前添加/修改请求头
关联的关键:backend 名称必须严格一致
frontend 中 use_backend 或 default_backend 后写的名称,必须与某个 backend 块的名称完全相同(区分大小写、不可含空格或特殊字符)。HAProxy 启动时会校验该引用是否存在,否则报错退出。
- 正确示例:
use_backend app_servers对应backend app_servers - 错误示例:
use_backend app-servers却定义了backend app_servers→ 启动失败 - 一个 frontend 可关联多个 backend,一个 backend 也可被多个 frontend 共用
进阶:动态 backend 选择(map + use_backend)
当路由规则复杂(如按域名、路径前缀、请求头值分发),可用 map 文件实现灵活映射:
- 在 frontend 中定义:
acl domain_map hdr(host),map(/etc/haproxy/domains.map) -m found - 再写:
use_backend %[hdr(host),map(/etc/haproxy/domains.map)] if domain_map -
domains.map内容形如:example.com bk_web、api.example.com bk_api










