简体   繁体   中英

Why is my Nginx reverse-proxy node.js+express server redirecting to 0.0.0.0?

I have a server configured to host multiple node.js+express apps on multiple domains through an Ngnix frontend. Everything works great, except for when calls to redirect are made from an express route:

res.redirect('/admin');

Then the client browser is redirected to http://0.0.0.0:8090

It seems like it must be an issue with the redirection headers coming out of express, but just in case it's relevant, here's the nginx.conf file for the domain in question:

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

Solved. I had a problem in my nginx conf file that was causing node/express to receive the wrong request-header. When a relative path is passed into res.redirect , it pulls the Host from the incoming req object and sets it in the response-header.

        proxy_set_header   Host             $proxy_host;

should have been

        proxy_set_header   Host             $host;

$proxy_host is the upstream host address 0.0.0.0:port

$host is the incoming request-header Host example.com


UPDATE

As Louis Chatriot points out in the comments, newer versions of Nginx have replaced $host with $http_host , which in previous versions returns example.com:port but now returns example.com .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM