O rewrite no seu bloco location é avaliado primeiro e, em seguida, proxy_pass é usado. Essa é a razão pela qual seu bloco map não funcionará com $uri . Porque quando o bloco map é acionado, o URL já está reescrito.
Eu tenho essa configuração no meu laboratório que funciona como esperado:
map $custom_service $custom_backend {
google "https://www.google.com";
bing "https://www.bing.com";
}
location ~ ^/([^\/]+)/.* {
set $custom_service $1;
rewrite ^/[^\/]+(/.*)$ $1 break;
proxy_pass $custom_backend;
}
O bloco map vai para o bloco http e o bloco location para o bloco server .
Seus URLs são assim:
http://nginx/google/some/params -> backend is now -> https://www.google.com/some/params
http://nginx/bing/some/params -> backend is now -> https://www.bing.com/some/params