跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

HAProxy配置文件中frontend与backend的逻辑关联

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

相关文章