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.