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