haproxy基于url路径转发请求需配置acl规则与use_backend指令,工作在七层http模式,必须启用mode http及http解析选项,按顺序匹配路径前缀、后缀、子串或正则,并设置default_backend兜底。

HAProxy 根据 URL 路径(URI)转发请求,核心是用 acl 定义匹配规则,再用 use_backend 触发对应后端。它工作在七层(HTTP),必须配置 mode http,且前端需启用 HTTP 解析能力。
定义路径匹配的 ACL 规则
ACL 是判断依据,支持多种匹配方式,常用路径相关指令有:
-
acl name path_beg -i /a:匹配以/a开头的 URI(不区分大小写) -
acl name path_end -i .html:匹配以.html结尾的请求 -
acl name path_reg -i ^/api/v[12]/.*$:用正则精确匹配 API 版本路径 -
acl name path_sub -i /admin/:匹配 URI 中包含/admin/子串
注意:-i 表示忽略大小写;path_beg 最常用,适合前缀路由(如 /app、/api);正则 path_reg 更灵活但性能略低。
绑定 ACL 到后端集群
在 frontend 段中,按顺序写 use_backend,HAProxy 自上而下匹配,命中即停止:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
use_backend api_nodes if api_path:当api_path为真时,转发到api_nodes后端 -
use_backend admin_nodes if admin_path:同理处理管理后台 -
default_backend web_default:兜底后端,**必须存在**,否则未匹配请求会报错或断连
顺序很重要 —— 若把更宽泛的规则(如 path_beg -i /)写在前面,后面的规则将永远不会生效。
确保 HTTP 模式与必要选项启用
路径匹配依赖完整 HTTP 解析,以下配置不可省略:
- frontend 和 backend 的
mode http必须一致 - frontend 中建议加上
option http-keep-alive和option forwardfor(透传真实 IP) - 避免误配成
mode tcp—— 此时 HAProxy 不解析 HTTP 头和 URI,路径规则完全无效
若需保留原始 Host 或添加自定义 Header(如 X-Forwarded-Proto),可在 frontend 中用 reqadd 或 http-request set-header 实现。
验证与调试技巧
配置生效后,可通过日志和状态页确认行为是否符合预期:
- 启用
option httplog,查看 access 日志中的req_uri字段,确认路径值 - 访问
http://haproxy-ip:9999/s(stats 页面),检查各 backend 的流量分布 - 用
curl -v http://ip/a/test配合后端响应头或日志,验证实际到达哪台机器 - 临时加一条
acl debug_path path_reg ^/debug/+use_backend debug_node if debug_path,专用于测试规则逻辑










