Nginx |如何根据 url 和 header 进行配置

问题描述 投票:0回答:1

基本上我已经有 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 中是邪恶的一样。有什么办法比较好。

nginx nginx-reverse-proxy nginx-config
1个回答
0
投票

这应该有效。我从 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
    }
    #...
}
© www.soinside.com 2019 - 2024. All rights reserved.