【问题标题】:Why is my Nginx reverse-proxy node.js+express server redirecting to 0.0.0.0?为什么我的 Nginx 反向代理 node.js+express 服务器重定向到 0.0.0.0?
【发布时间】:2011-06-19 21:15:02
【问题描述】:

我有一个服务器配置为通过 Ngnix 前端在多个域上托管多个 node.js+express 应用程序。一切都很好,除了从快速路由调用重定向时:

res.redirect('/admin');

然后客户端浏览器重定向到http://0.0.0.0:8090

看来这一定是来自 express 的重定向标头有问题,但以防万一,这是相关域的 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;
    }
}

【问题讨论】:

    标签: node.js nginx express


    【解决方案1】:

    解决了。我的 nginx conf 文件中有一个问题,导致 node/express 接收到错误的请求标头。当一个相对路径被传入res.redirect 时,它会从传入的req 对象中拉取Host 并将其设置在response-header 中。

            proxy_set_header   Host             $proxy_host;
    

    应该是

            proxy_set_header   Host             $host;
    

    $proxy_host是上游主机地址0.0.0.0:port

    $host 是传入的请求头主机example.com


    更新

    正如 Louis Chatriot 在 cmets 中指出的那样,新版本的 Nginx 已将 $host 替换为 $http_host,在以前的版本中返回 example.com:port,但现在返回 example.com。

    【讨论】:

    • 在最新版本的 Nginx 中,您现在应该使用 $http_host 而不是 $host。
    • @LouisChatriot 感谢您的来信!我已经更新了答案以涵盖更多当前版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2016-09-07
    • 2017-08-16
    • 2017-07-17
    • 2018-09-10
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多