基本上我已经有 2 条基于 url 模式的规则。现在我想根据标头值添加另一个条件,假设如果源标头 =“gif”,则将请求重定向到此上游“http://zone3.svc.cluster.local:4911;”(如果源存在)但值不同,如果源甚至不存在,则继续执行我下面的基于 url 的条件并重定向请求。如何使用 nginx 实现这一点? Nginx 版本:v1.14.2
location ~ ^/v[1-9]+(.[0-9]+)*/abc/fetch {
set $upstream http://zone1.svc.cluster.local:4911;
proxy_pass $upstream;
}
location ~ ^/v[1-9]+(.[0-9]+)*/abc/b2c {
set $upstream http://zone2.svc.cluster.local:4911;
proxy_pass $upstream;
}
// fallback rule
location ~ ^/v[1-9]+(.[0-9]+)*/abc {
set $upstream http://zone.svc.cluster.local:4911;
proxy_pass $upstream;
}
也有一些关于不使用 if 的讨论,就好像 nginx 中是邪恶的一样。有什么办法比较好。
这应该有效。我从 nginxcommunity slack 得到这个。人名:利亚姆。
map $http_source $final_upstream {
"gif" http://zone3.svc.cluster.local:4911;
"png" http://zone3.svc.cluster.local:4912;
default $upstream;
}
server {
location ~ ^/v[1-9]+(.[0-9]+)*/abc/fetch {
set $upstream http://zone1.svc.cluster.local:4911;
proxy_pass $final_upstream; # Evaluated by map block
}
#...
}