A maneira típica de fazer proxy reverso de diferentes subdomínios para locais diferentes com o Nginx é instalar um servidor exclusivo para cada subdomínio, assim:
server {
server_name subdomain1.example.com;
location / {
proxy_pass http://hostname1:port1;
}
}
server {
server_name subdomain2.example.com;
location / {
proxy_pass http://hostname2:port2;
}
}
É possível obter o mesmo resultado em um único bloco de servidor (por exemplo, server_name .example.com, sem nenhum subdomínio especificado), especificando diferentes locais nesse bloco de servidor?
Se você especificar locais diferentes, não será o mesmo resultado, pois você tem o mesmo
location /
em doisserver
blocos.Sim, é possível.
Primeiro, configure um
map
para mapear domínios emproxy_pass
destinos:Quando o nginx recebe um pedido, ele vai para a
proxy_pass
diretiva. Em seguida, ele resolve$dest
usando omap
, que mapeia diferentes nomes de host virtual para destinos. Em seguida, o nginx faz proxy da solicitação usando o destino resolvido.Lembre-se de configurar o destino padrão corretamente. Todo servidor web público recebe solicitações para todos os tipos de nomes de domínio. Normalmente, você deseja retornar 404 em hosts virtuais desconhecidos.