Tente usar um mapa. Algo como
map $http_host $backend {
host1 backend1;
host2 backend2;
default backend1;
}
upstream backend {
server $backend.site.tld # nginx won't recognise .local unless in DNS
}
pode funcionar. Não posso garantir isso, pois não posso testá-lo no momento, mas é a rota geral para trabalhar com variáveis em um nível baixo.
Atualizado: nginx precisa saber sobre seus backends na inicialização, então você os define na sua diretiva upstream:
upstream backend {
server server1.site.tld;
server server2.site.tld;
...
}
Em seguida, defina seu proxy_pass
no mapa:
proxy_pass $backend;