Así que estoy configurando una ruta virtual cuando apunto a una aplicación node.js en mi nginx conf. la sección relevante se ve así:
location /app {
rewrite /app/(.*) /$1 break;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Funciona muy bien, excepto que cuando mi aplicación node.js (una aplicación express) llama a una redirección.
Como ejemplo, el cuadro de desarrollo está ejecutando nginx en el puerto 8080, por lo que la URL de la raíz de la aplicación de nodo se ve así:
http: // localhost: 8080 / app
Cuando llamo a una redirección a '/ aplicación' desde el nodo, la redirección real va a:
Respuestas:
El problema es que la aplicación Node.js no está emitiendo la redirección correctamente. Puede usarlo
proxy_redirect
para corregir esto en nginx:fuente
Solo tenía que resolver el mismo problema con Jenkins ejecutándose detrás de nginx. Lo que hizo por mí fue incluir el puerto del servidor en el
Host
encabezado que se envía a Jenkins:Espero que ayude.
fuente
Probé las soluciones anteriores, pero todas fallaron cada vez que la aplicación de nodo emitió una URL totalmente calificada en el encabezado de ubicación, como " http://nodeapp.com:8080/new/location "
Así que terminé usando $ http_host para pasar el host y el puerto. Y usando una coincidencia ~ ^ para reescribir las URL por completo.
En nuestro caso, el servidor Node se ejecuta en 8080 y nuestro proxy nginx se ejecuta en 8000. Esto significa que cada URL totalmente calificada en un encabezado de ubicación debe reescribirse. Espero que esto ayude a alguien !!
fuente
Según la conversación sobre esta pregunta , la resolución adecuada es ajustar la
Host
directiva de encabezado del proxy .Cambia esto:
A esto:
$http_host
contiene el valor especificado en el encabezado HTTP HOST, que incluye el puerto. Los redireccionamientos deben elegir el puerto personalizado sin más personalización para la configuración de OP.Estas respuestas (mismo boleto) elaboran más:
fuente