Ocultar porta no redirecionamento de proxy reverso Nginx

2

Minha configuração é a seguinte:

  • Webserver : app ouvindo na porta 8529.
  • Proxy reverso : Nginx ouvindo na porta 80.

O problema é que meu Nginx redireciona as solicitações para a porta 8529 e isso aparece na URL como http://some.domain.com:8529/foo , o que não é o que desejo realizar.

Meu arquivo relacionado nginx sites-available atual é o seguinte:

server {

  listen 80;
  server_name some.domain.com;

  location / {
    proxy_pass http://localhost:8529/foo;
    proxy_redirect off;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-NginX-Proxy   true;
  }

}

Em que some.domain.com está dentro de /etc/hosts apontando para 127.0.0.1 .

Alguma dica?

    
por jarandaf 09.09.2014 / 16:55

2 respostas

4

Ocultar a porta durante o proxy precisa dessas duas linhas no corpo do servidor:

server_name_in_redirect off;
proxy_set_header Host $host:$server_port;

O conf é como:

server
{
listen 80;
server_name example.com;
server_name_in_redirect off;
proxy_set_header Host $host:$server_port;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
access_log off;
}
    
por 24.04.2016 / 11:37
1

O seu servidor upstream emitiu um redirecionamento e você proibiu o nginx de reescrevê-lo com proxy_redirect off; e faltando uma barra à direita na diretiva proxy_pass ou seu aplicativo está criando essas URLs.

Observação: como Alexey disse, uma barra final é importante nesse caso, já que o nginx removerá a parte do URI normalizado que corresponde ao prefixo do local, ou seja, / antes de anexá-lo ao proxy_pass URI. Assim, seu servidor de back-end receberá uma solicitação em /foobar , enquanto você provavelmente está esperando por /foo/bar .

    
por 16.09.2014 / 21:46