Lo estoy usando nginx
como 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:7180
la misma página de inicio de sesión y tengo que iniciar sesión nuevamente. ¿Se puede evitar este doble inicio de sesión?
linux
nginx
reverse-proxy
tonio94
fuente
fuente
Respuestas:
No ajuste
proxy_redirect
aoff
, que no está haciendo lo que cree que está haciendo.proxy_redirect
realiza algo similar a la reescritura de URL, por ejemplo:Esto le permite alojar la
/sales/
ruta en otro lugar. Pero incluso entonces, los parámetros predeterminados paraproxy_redirect
hacer exactamente eso por usted de forma gratuita. El valor predeterminado es redirigir la ubicación a lo que sea que esté presenteproxy_pass
(y los parámetros predeterminados se usan cuando no se configuraproxy_redirect
o no se usaproxy_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.Tenga en cuenta que la aplicación
http://ip_of_the_app:7180/
ahora recibirá la solicitud con elHost: my-app.net
encabezado.También debe considerar usar un par de encabezados más:
Esto permitirá un mejor inicio de sesión dentro de la aplicación en
http://ip_of_the_app:7180/
.X-Forwarded-For
dando la IP del cliente real (en oposición anginx
la IP de s) yX-Forwarded-Proto
verificar si el cliente se conectó anginx
través de HTTP o HTTPS.fuente
Referer
es simplemente el$http_referer
que 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.