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