A abordagem idiomática do Nginx para esse tipo de problema é via map
. Por favor, veja minha resposta no StackOverflow .
Basicamente, você define uma map
em http
seção
map $any_variable $my_upstream {
# Default value:
default upstream1;
# Exact match:
application/vnd.vendorname+json;v=1 upstream2;
# Regexp:
~^application.*vnd.vendorname-v1\+json upstream3;
}
Você pode combinar correspondências exatas e expressões regulares em um mapa.
Você simplesmente usa $my_upstream
em server
ou location
seção (s):
location / {
proxy_pass http://$my_upstream$uri;
}
O Nginx avalia as variáveis do mapa preguiçosamente, apenas uma vez (por solicitação) e quando você as usa.