haproxy + lua,如何根据查询参数值在2个后端中进行选择

我有一个带有以下端点和查询参数的 API:

/myService/myrequest?param1=value1
/myService/myrequest?param1=value2

我的问题是,如果 param1 的值是'value1',则应选择'backend1'作为后端,但是如果 param1 的值是'value2',则应选择'backend2'作为后端。我试图使用 Lua 来实现这个目的。

我的问题是: 1. 是否可以仅使用 haproxy 而无需 Lua 来完成? 2. 如果使用 Lua,我们该如何操作?

点赞
用户834045
用户834045

你可以在纯nginx中这样做,基本上是这样的:

if ($arg_param1 = 'value1') {
  proxy_pass    'localhost:1000';
}
if ($arg_param1 = 'value2') {
  proxy_pass    'localhost:2000';
}

这里我假设你只是想设置上游。

2019-10-18 08:26:30
用户33254
用户33254

你可以直接使用 HAProxy ACLs 来实现你想要的目的,即使用 urlp

frontend myfrontend

# your bind statement and other options
...

acl param1_eq_value1 urlp(param1) value1
acl param1_eq_value2 urlp(param1) value2

use_backend backend1 if param1_eq_value1
use_backend backend2 if param1_eq_value2
default_backend <your_default_backend>
2019-10-18 10:19:29