nginx locais de reescrita de proxy reverso

1

ok, então eu tenho uma máquina virtual link rodando phppgadmin. Eu queria expor phppgadmin à internet em admin.example.com, então eu fiz

server {
  listen 80;
  server_name admin.example.com;
  location / {
    proxy_pass              http://10.0.8.247:80/;
  }
}

e isso funciona como esperado. indo para admin.example.com/phppgadmin envia o pedido para 10.0.8.247 e eu recebo a resposta que quero. Agora, Eu queria mudar um pouco as coisas: ter a mesma resposta em admin.example.com/postgres. Então eu tentei

server {
  listen 80;
  server_name admin.example.com;
  location /postgres/ {
    proxy_pass              http://10.0.8.247:80/phppgadmin/;
  }
}

mas isso continua falhando comigo. O navegador indica que está tentando se conectar ao 10.0.8.247 que naturalmente não funcionará, já que eu não exponho as máquinas virtuais diretamente à internet. Alguém tem uma dica? Agradecemos antecipadamente, P.

======================================

A solução é fluida (muito obrigado, cnst!)

server {
  listen 80;
  server_name admin.example.com;

  location /postgres/ {
    proxy_pass              http://10.0.8.247:80/phppgadmin/;
    proxy_redirect          default;
  }
}

funciona como charme. Observe também que

proxy_redirect              default;

é o mesmo ase

proxy_redirect             http://10.0.8.247:80/phppgadmin/ /postgres/;
    
por Killua 07.07.2016 / 02:39

1 resposta

1

O problema que você está enfrentando é controlado pela diretiva proxy_redirect .

Se a sua configuração é exatamente como descrita, então isso significa que o nginx não está normalizando :80 parte do proxy_pass para que o proxy_redirect funcione corretamente (o que não me surpreenderia muito, porque a maioria as pessoas não enviam proxy para a porta 80 de qualquer maneira), nesse caso, você pode tentar remover :80 ou adicionar uma diretiva proxy_redirect explícita.

Caso contrário, se você estiver usando expressões regulares ou variáveis em suas diretivas location ou proxy_pass , não o faça, ou apenas adicione um proxy_redirect explícito também.

    
por 07.07.2016 / 03:21