【发布时间】:2020-04-27 12:14:45
【问题描述】:
我有一个场景,我想 proxy_pass 根据可以出现在标头中或作为查询参数的值向多个上游目的地之一请求。
现在,我已经大致了解了基于标头的映射:
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 块中了) ,我对这种方法持怀疑态度。
有没有一种好方法可以合并这两个信息源,以便将它们的值清晰地映射到上游?
【问题讨论】:
-
可以级联两张map,一张map的值作为第二张的默认值。这可能对你有用。
-
你知道在哪里可以找到文档或示例@RichardSmith 吗?
标签: nginx conditional-statements nginx-config