2011-06-19 106 views
5

我有一臺服務器配置爲通過Ngnix前端在多個域中承載多個node.js + express應用程序。一切都很正常,除了當呼叫重定向從明確路線是由:爲什麼我的Nginx反向代理node.js + express服務器重定向到0.0.0.0?

res.redirect('/admin'); 

然後在客戶端瀏覽器重定向到http://0.0.0.0:8090

現在看來似乎必須與重定向頭出來的問題但爲了防萬一,這是相關域的nginx.conf文件:

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

回答

5

已解決。我在nginx conf文件中遇到問題,導致node/express收到錯誤的請求頭。當一個相對路徑傳遞到res.redirect時,它會將主機從傳入的req對象中拉出,並將其設置在響應頭中。

 proxy_set_header Host    $proxy_host; 

應該已經

 proxy_set_header Host    $host; 

$proxy_host上游主機地址0.0.0.0:port

$host是傳入請求頭主機example.com


UPDATE

路易Chatriot在評論中指出,Nginx的新版本已經取代$host$http_host,這在以前的版本中返回example.com:port,但現在返回example.com

+2

在最新版本的Nginx中,您現在應該使用'$ http_host'而不是'$ host'。 –

+0

@LouisChatriot感謝您的注意!我已經更新了涵蓋更多當前版本的答案。 –

相關問題