Redirecionamento de proxy reverso Nginx

8

Estou usando nginx como um proxy reverso e quando faço login na minha interface da web, sou redirecionado para o URL com proxy. Eu gostaria de evitá-lo e sempre manter o "server_name" como o URL. É possível?

Este é o meu /etc/nginx/conf.d/my_app.conf :

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 

Eu conecto em http://my-app.net , insiro as informações de login, sou redirecionado para http://ip_of_the_app:7180 na mesma página de login e preciso fazer o login novamente. Este duplo login pode ser evitado?

    
por tonio94 16.06.2016 / 14:39

1 resposta

13

Não defina proxy_redirect para off , isso não está fazendo o que você acha que está fazendo. proxy_redirect realiza algo semelhante à regravação de URL, por exemplo:

location /sales/ { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/; 
}

Isso permite que você hospede o caminho /sales/ em outro lugar. Mas, mesmo assim, os parâmetros padrão para proxy_redirect fazem exatamente isso para você de graça. O padrão é redirecionar o local para o que estiver presente em proxy_pass (e os parâmetros padrão são usados quando você não define proxy_redirect ou usa proxy_redirect default; ).

Você não precisa definir proxy_redirect .

O que você está perdendo são cabeçalhos que precisam ser enviados para o aplicativo. O mais importante deles é HOST . Isso deve executar o proxy conforme desejado e manter o URL correto no navegador.

location / { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_set_header HOST $host;
}

Observe que o aplicativo em http://ip_of_the_app:7180/ agora receberá a solicitação com o cabeçalho Host: my-app.net .

Você também deve considerar usar mais alguns cabeçalhos:

proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

Isso permitirá um registro melhor dentro do aplicativo em http://ip_of_the_app:7180/ . X-Forwarded-For fornecendo o IP do cliente real (em oposição a nginx s IP) e X-Forwarded-Proto para verificar se o cliente está conectado ao nginx por meio de HTTP ou HTTPS.

    
por 21.06.2016 / 01:25