Redirección de proxy inverso de Nginx

14

Lo estoy usando nginxcomo proxy inverso y cuando inicio sesión en mi interfaz web, se me redirige a la URL proxy. Me gustaría evitarlo y mantener siempre el "nombre_servidor" como URL. ¿Es posible?

Este es mi /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; 
    } 
} 

Me conecto http://my-app.net, ingreso la información de inicio de sesión, luego me redirigen a http://ip_of_the_app:7180la misma página de inicio de sesión y tengo que iniciar sesión nuevamente. ¿Se puede evitar este doble inicio de sesión?

tonio94
fuente
tonio94, ¿se ha solucionado su problema? En caso afirmativo, acepte la respuesta. en caso negativo, aclare lo que falta.
cnst
2
Lo probé ayer, funciona, proxy_redirect necesita ser eliminado. Gracias por la ayuda.
tonio94

Respuestas:

26

No ajuste proxy_redirecta off, que no está haciendo lo que cree que está haciendo. proxy_redirectrealiza algo similar a la reescritura de URL, por ejemplo:

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

Esto le permite alojar la /sales/ruta en otro lugar. Pero incluso entonces, los parámetros predeterminados para proxy_redirecthacer exactamente eso por usted de forma gratuita. El valor predeterminado es redirigir la ubicación a lo que sea que esté presente proxy_pass(y los parámetros predeterminados se usan cuando no se configura proxy_redirecto no se usa proxy_redirect default;).

No es necesario configurar proxy_redirect.


Lo que falta son los encabezados que deben enviarse a la aplicación. El más importante de ellos es HOST. Esto realizará el proxy como se desee y mantendrá la URL correcta en el navegador.

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

Tenga en cuenta que la aplicación http://ip_of_the_app:7180/ahora recibirá la solicitud con el Host: my-app.netencabezado.


También debe considerar usar un par de encabezados más:

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

Esto permitirá un mejor inicio de sesión dentro de la aplicación en http://ip_of_the_app:7180/. X-Forwarded-Fordando la IP del cliente real (en oposición a nginxla IP de s) y X-Forwarded-Protoverificar si el cliente se conectó a nginxtravés de HTTP o HTTPS.

grochmal
fuente
Gracias por tu ayuda. proxy_redirect no es necesario pero proxy_set_header Referer ip_of_the_app: 7180 debe estar configurado para que funcione correctamente.
tonio94
@ tonio94 - Gracias, actualicé la respuesta. Tenga en cuenta que el uso normal de Refereres simplemente el $http_refererque lo copia de la solicitud. Eso no funciona si la solicitud no tiene un encabezado Referer, por lo que codificarlo es una solución en algunos casos.
grochmal
@ JonathanKomar - Gracias por eso, estás en lo correcto, ahora editado. Lo siento, me tomó un tiempo notar tu comentario.
grochmal
@grochmal Gracias, básicamente me salvaste la vida con esta información sobre: ​​proxy_set_header HOST $ host;
Obay Abd-Algader