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>
我有一个 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>