我有一个场景,希望能够根据出现在头部或查询参数中的值,将请求代理到多个上游目标之一。目前,我已经基本解决了基于头部的映射:
显然,这对于存在标题的情况非常有效,但对于基于操作的目标则无效。我的最初想法是使用某种条件逻辑来查看标题是否存在,并根据
map $http_x_destination $destination {
default upstream0;
something upstream1;
something2 upstream1;
something3 upstream2;
}
...
server {
location / {
proxy_pass https://$destination;
}
}
显然,这对于存在标题的情况非常有效,但对于基于操作的目标则无效。我的最初想法是使用某种条件逻辑来查看标题是否存在,并根据
$http_x_target
构建映射表,如果不存在,则使用 $arg_target
。但我已经读过很多不要使用if
的警告,因为它被认为是危险的,而且由于我不知道nginx首先如何处理定义的作用域(更不用说在if
块中了),所以我对这种方法持谨慎态度。有没有一种好的方法将这两个信息源合并,以便将它们的值干净地映射到上游?