es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NGINX Proxy pasando a un sitio externo que tiene una redirección interna.

Estoy tratando de configurar un proxy Nginx que oculte un sitio interno a través del proxy pass, pero sin éxito. La configuración que utilicé es la siguiente:

location /internal1/ {
   proxy_set_header X-Forwarded-Host $host;
   proxy_set_header X-Forwarded-Server $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_connect_timeout 15;
   proxy_read_timeout 180;
   proxy_pass http://internal1/;
}

upstream internal1 {
   server a.b.c.d:80;
}

El problema es que cuando intento acceder al sitio a.b.c.d, redirige a una página de inicio de sesión que debería ser http://a.b.c.d/login, y después de iniciar sesión, redirige a otra página http://a.b.c.d/device/config. Con el proxy, redirige a http://mysite/login y http://mysite/device/config.

Esto hace que el proxy no funcione y me muestre “recurso no encontrado” y no puedo ver ninguna de las páginas.

Si cambio el valor de proxy_pass a http://a.b.c.d/login/, muestra la página de inicio de sesión en http://mysite/internal1 y después de iniciar sesión muestra “recurso no encontrado” porque intenta acceder a http://mysite/device/config.

¿Alguien tiene alguna sugerencia sobre cómo configurarlo de manera correcta?

Gracias por todas las respuestas.

EDIT:
Lo siento por la respuesta tardía, pero estuve muy ocupado durante ese tiempo. De todos modos, esa solución funciona para un dispositivo, pero ahora todos mis dispositivos conectados solo van a esa página “interna” y no puedo diferenciar entre ellos porque Nginx no admite la misma ubicación en múltiples configuraciones (todos los dispositivos tienen una ip/página1).

location /page1/
{ 
 proxy_pass mysite/internal1/page1;
 proxy_redirect off;
 proxy_set_header Host $host;
}

EDIT2:
Desafortunadamente, no es posible exponer todos los dispositivos directamente a Internet. La solución que encontré es crear un subdominio personalizado de DNS y luego crear un bloque de servidor Nginx diferente para cada dispositivo con su propia ubicación y futuras redirecciones/proxies, etc.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que el sitio interno redirige a páginas específicas como “/login” y “/device/config”, y la configuración actual del proxy no las maneja correctamente. Una solución podría ser agregar bloques de ubicación específicos para cada una de estas páginas en la configuración de nginx, como:

    location /internal1/login {
        proxy_pass http://a.b.c.d/login;
    }
    
    location /internal1/device/config {
        proxy_pass http://a.b.c.d/device/config;
    }
    

    De esta manera, cuando el sitio interno redirija a estas páginas específicas, nginx correctamente proxyará la solicitud a la URL correspondiente en el servidor interno.

    Si hay varios dispositivos con páginas internas similares, podría ser necesario crear múltiples bloques de ubicación con diferentes nombres, o utilizar un mecanismo de enrutamiento más avanzado como coincidencia de expresiones regulares o reescritura de solicitudes.

    Alternativamente, si es posible modificar el código o la configuración del sitio interno, podría ser más fácil configurarlo para que utilice rutas relativas en lugar de absolutas, de manera que pueda funcionar detrás de un proxy inverso sin problemas de redirección.

    Finalmente, si ninguna de estas opciones funciona o es factible, otro enfoque podría ser exponer cada sitio interno como un subdominio o dominio separado y configurar bloques de servidor de nginx para cada uno. De esta manera, cada sitio interno puede tener su propia configuración de proxy y evitar conflictos con otros sitios.

Comments are closed.