配置HAProxy根据url_param路由流量

问题描述:

我对HAProxy非常陌生。我花了几个小时试图找出如何去做,但无法获得任何线索。我的要求是这样的:配置HAProxy根据url_param路由流量

如果请求的终点是/ special,那么我需要检查URL_PARAM。

例如:本地主机/特殊ID = 10

基于ID,我需要将其路由到3的一台服务器。 If id <=3 server1, if id > 3 and id <=6 server2 else server3

如果结束点不是所有3台服务器之间的特殊轮循机制。

我该如何实现这2级的平衡?

您可以使用urlpurlp_val来提取id。然后,使用acl至match the integer

acl is_special  path_beg /special 
acl small_id   urlp_val(id) le 3 
acl medium_id  urlp_val(id) 4:6 
acl high_id   urlp_val(id) gt 6 

use_backend bck1  if is_special small_id 
use_backend bck2  if is_special medium_id 
use_backend bck3  if is_special high_id 
default_backend  bck_all 

然后,创建3个后端:每个案例一个。

编辑:

如果你想在查询参数使用正则表达式,使用urlp_reg

acl small_id  urlp_reg(id) ^[0-3] 
acl medium_id  urlp_reg(id) ^[4-6] 
acl high_id  urlp_reg(id) ^[7-9] 

还要检查stick,这取决于你想做什么。

+0

非常感谢!但是如果整数ID真的很大。如果它只能被视为字符串。对于在示例中未明确表示的道歉。我可以使用某种正则表达式匹配吗? – Maxsteel

+0

对不起,我刚刚从我的数据示例中认识到ID基本上来自UID。 – Maxsteel

+0

'urlp_reg'将起作用(请参阅我的编辑)。 –