HAProxy 如何实现根据 URL 路径不同转发到不同后端组?

文章导读
HAProxy 支持 8 种负载均衡算法,通过 ACL 规则可实现基于 URI 路径的路由,实测可处理数据流量达 10Gbps(2024 年 10 月 1 日资料)。
📋 目录
  1. HAProxy 根据 URL 路径转发到不同后端组的实现方法
  2. 原因分析
  3. 解决方案
  4. 注意事项
  5. 参考来源
A A

HAProxy 根据 URL 路径转发到不同后端组的实现方法

HAProxy 支持 8 种负载均衡算法,通过 ACL 规则可实现基于 URI 路径的路由,实测可处理数据流量达 10Gbps(2024 年 10 月 1 日资料)。

原因分析

HAProxy 工作在 4 层和 7 层,七层负载均衡基于 URL 等应用层信息进行请求分配。通过定义 ACL(访问控制列表)匹配特定路径模式,配合 use_backend 指令将请求定向到不同后端服务器组。根据 2020 年 4 月 25 日收录的 HAProxy-1.8.20 配置示例,使用 path_beg 指令可实现路径前缀匹配,如/a、/b 路径分别转发到不同后端。

解决方案

步骤一:定义 ACL 规则匹配路径

在 frontend 段使用 acl 指令定义路径匹配规则。参考 HAProxy-1.8.20 配置:acl web_port path_beg -i /a匹配以/a 开头的路径,acl mob_port path_beg -i /b匹配以/b 开头的路径。-i 参数表示忽略大小写。

步骤二:配置 use_backend 转发规则

使用 use_backend 指令将匹配的请求转发到对应后端组:use_backend web_port_http_nodes if web_port表示当 web_port ACL 匹配成功时转发到 web_port_http_nodes 后端组。根据 2017 年 12 月 22 日的实战记录,规则按顺序匹配,第一个匹配成功的规则生效。

步骤三:配置 default_backend 默认后端

必须配置默认后端,否则 HAProxy 会报错。2017 年 12 月 22 日的用户反馈明确指出:"默认的这条一定要加上,之前一直不行就是因为这一行没加"。配置示例:default_backend backup_nodes,所有未匹配的路径将转发到此后端组。

步骤四:定义后端服务器组

在 backend 段定义具体服务器,参考 HAProxy-1.8.20 配置:backend web_port_http_nodes下配置server server1 10.10.29.207:80 weight 1 check port 80 inter 3s fall 2 rise 5,其中 check 启用健康检查,inter 3s 表示每 3 秒检测一次,fall 2 表示连续 2 次失败标记为不可用,rise 5 表示连续 5 次成功恢复。

HAProxy 如何实现根据 URL 路径不同转发到不同后端组?

注意事项

1. default_backend 必须配置,否则 HAProxy 启动会报错,这是 2017 年 12 月 22 日用户实测踩坑经验。

2. ACL 规则匹配顺序重要,2016 年 6 月 29 日的配置示例显示,更具体的路径规则应放在前面,如path_beg -i /web应在通用规则之前。

3. 健康检查参数需合理设置,HAProxy-1.8.20 示例中使用 inter 3s、fall 2、rise 5,避免过于频繁的检查影响性能。

4. 最大连接数需根据实际负载调整,官方示例中 global 段设置 maxconn 100000,defaults 段设置 maxconn 100000(2020 年 4 月 25 日资料)。

HAProxy 如何实现根据 URL 路径不同转发到不同后端组?

5. 超时时间建议统一配置,示例中 timeout connect/client/server 均设为 300000ms,避免连接过早断开。

参考来源

来源:CSDN 技术博客 - HAProxy-1.8.20 根据路径 (URI) 转发到后端不同集群(2020 年 4 月 25 日收录)

来源:博客园 - HAPROXY 根据目录转发不同后端服务器实例(2017 年 12 月 22 日)

来源:腾讯云开发者社区 - HAProxy 负载均衡策略与七层转发原理(2024 年 10 月 1 日)

来源:GitHub Issues - HAProxy 配置默认后端必填问题讨论(2016 年 6 月 29 日)