2011-06-19 11 views
5

Mam serwer skonfigurowany do hostowania wielu aplikacji node.js + express w wielu domenach za pośrednictwem interfejsu Ngnix. Wszystko działa świetnie, z wyjątkiem, gdy wzywa do przekierowania są wykonane z drogi ekspresowej:Dlaczego mój Nginx reverse-proxy node.js + serwer ekspresowy przekierowuje do 0.0.0.0?

res.redirect('/admin'); 

Wtedy przeglądarka klient zostaje przekierowany do http://0.0.0.0:8090

Wydaje się, że musi to być problem z nagłówki przekierowania wychodzi ekspresowych, ale tylko w przypadku, gdy jest to stosowne, tutaj jest plik nginx.conf dla danej domeny:

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; 
    } 
} 

Odpowiedz

5

rozwiązany. Miałem problem w moim pliku conf nginx, który powodował, że węzeł/ekspres otrzymywał zły nagłówek żądania. Kiedy ścieżka względna jest przekazywana do res.redirect, ciągnie Hosta z przychodzącego obiektu req i ustawia go w nagłówku odpowiedzi.

 proxy_set_header Host    $proxy_host; 

powinien być

 proxy_set_header Host    $host; 

$proxy_host jest upstream adres hosta 0.0.0.0:port

$host jest przychodzące żądanie-nagłówka Host example.com


UPDATE

Jak Louis Chatriot zwraca uwagę w komentarzach, nowsze wersje Nginx zastąpiły $host z $http_host, który w poprzednich wersjach powraca example.com:port ale teraz powraca example.com.

+2

W najnowszych wersjach Nginx powinieneś teraz użyć '$ http_host' zamiast' $ host'. –

+0

@LouisChatriot Dzięki za notatkę! Zaktualizowałem odpowiedź, aby objąć bardziej aktualne wersje. –

Powiązane problemy