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

haproxy + lua, how can we choose among 2 backends based on query param value

我有一个 api 具有以下端点和查询参数:

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

我的问题是,如果 param1 的值为 'value1',则后端应选择为 'backend1',但如果 param1 的值为 'value2',则后端应选择为 'backend2'.为此,我正在尝试使用 Lua。

我的问题是: 1.不用Lua只用haproxy可以吗? 2.如果用Lua,我们怎么办?

您可以在纯 nginx 中执行此操作,基本上类似于:

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

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

您可以直接使用 HAProxy ACL 来实现您想要的,即使用 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>