Esta configuração nginx funciona para mim:
location /foo/ {
proxy_pass http://a.bar.mesos/;
}
Observe que o seletor location e o valor proxy_pass são URIs. Então, você sabe, isso afeta como a URL é reescrita para o servidor upstream. Por exemplo, http://.../foo/bar é reescrito para http://a.bar.mesos/bar . Se o valor proxy_pass fosse http://a.bar.mesos sem a barra final, o URL seria reescrito como http://a.bar.mesos/foo/bar , o que é incorreto para mim.
Como você também deve saber, se a.bar.mesos não puder ser resolvido na hora de início do nginx, o nginx não será iniciado. Uma maneira de contornar isso é mencionada em outras perguntas neste site e é usar uma diretiva resolver e uma variável como esta:
location /foo/ {
resolver 127.0.0.1;
set $a_bar_mesos a.bar.mesos;
proxy_pass http://$a_bar_mesos/;
}
Na verdade, isso resolve o problema de o nginx não iniciar com um nome de host não resolvido, mas também faz com que o nginx não reconheça mais que o valor
proxy_pass tem um URI e, portanto, a regravação de URL se torna incorreta para mim. Ou seja, use as regras de regravação associadas a um valor
proxy_pass de
http://a.bar.mesos em vez de
http://a.bar.mesos/ .
A minha pergunta é, alguém sabe como iniciar o nginx com nomes de host não resolvidos e obter as regras de reescrita de URL URI / URI?
Então, você sabe o meu caso de uso, eu uso o Mesos para lançar programas em um cluster de máquinas. Os programas têm nomes conhecidos como a.bar . Eu uso mesos-dns para associar o nome do programa a.bar com o hostname a.bar.mesos e o endereço IP da máquina que Mesos atribuiu a ele. Quando o programa não está em execução, mesos-dns remove o nome a.bar.mesos de seu registro. Eu uso nginx para encaminhar solicitações HTTP para o programa através da configuração acima. Quando estou reiniciando o servidor que hospeda o nginx, não há garantia de que todos os programas com proxy serão instalados e funcionando.