2011-06-19 13 views
5

Tengo un servidor configurado para alojar múltiples aplicaciones node.js + express en múltiples dominios a través de una interfaz de Ngnix. Todo funciona muy bien, a excepción de cuando las llamadas para redirigir están hechos de una ruta expresa:¿Por qué mi Nginx reverse-proxy node.js + express server redirige a 0.0.0.0?

res.redirect('/admin'); 

Luego se redirige el navegador del cliente a http://0.0.0.0:8090

Parece que debe haber un problema con los encabezados de redirección que sale de expresar, pero en caso de que sea relevante, aquí está el archivo nginx.conf para el dominio en cuestión:

server { 
    listen 0.0.0.0:80; 
    server_name *.example.com; 

    access_log /var/log/nginx_example_access.log; 
    error_log /var/log/nginx_example_error.log debug; 

    # proxy to node 
    location/{ 
     proxy_pass   http://0.0.0.0:8090/; 
     proxy_redirect  off; 

     proxy_set_header Host    $proxy_host; 
     proxy_max_temp_file_size 0; 

     client_max_body_size  10m; 
     client_body_buffer_size 128k; 

     proxy_connect_timeout  90; 
     proxy_send_timeout   90; 
     proxy_read_timeout   90; 

     proxy_buffer_size   4k; 
     proxy_buffers    4 32k; 
     proxy_busy_buffers_size 64k; 
     proxy_temp_file_write_size 64k; 
    } 
} 

Respuesta

5

resuelto. Tuve un problema en mi archivo nginx conf que causaba que node/express recibiera el encabezado de solicitud incorrecto. Cuando se pasa una ruta relativa al res.redirect, extrae el host del objeto entrante req y lo establece en el encabezado de respuesta.

 proxy_set_header Host    $proxy_host; 

debería haber sido

 proxy_set_header Host    $host; 

$proxy_host es el aguas arriba dirección de host 0.0.0.0:port

$host es el entrante anfitrión solicitud en la cabecera example.com


ACTUALIZACIÓN

Como señala Louis Chatriot en los comentarios, las nuevas versiones de Nginx han reemplazado con $host$http_host, que en las versiones anteriores vuelve example.com:port pero ahora vuelve example.com.

+2

En las versiones más nuevas de Nginx, ahora debería usar '$ http_host' en lugar de' $ host'. –

+0

@LouisChatriot ¡Gracias por la nota! Actualicé la respuesta para cubrir más versiones actuales. –

Cuestiones relacionadas