Express.js使用虚拟路径重定向

时间:2012-02-23 20:42:07

标签: nginx express

所以我在指向nginx.conf中的node.js应用程序时设置了一个虚拟路径。相关部分如下:

location /app {
  rewrite /app/(.*) /$1 break;
  proxy_pass http://localhost:3000;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

效果很好,除非我的快递应用程序调用重定向。

例如,开发框在端口8080上运行nginx,因此节点应用程序根目录的URL如下所示:

http://localhost:8080/app

当我从快递呼叫res.redirect('/app')时,实际的重定向将转到:

http://localhost/app

由于没有任何东西在端口80上运行,显然,这会失败。我也找不到请求对象的任何属性,这些属性可以让我将URL构造为绝对URL。任何缺乏硬编码或使其成为环境变量的想法?

* 编辑:经过多一点挖掘,看起来主机头在这种情况下被定义为'localhost',而如果我直接连接到expres app,主机头是定义为'localhost:3000'(其中3000是节点应用正在侦听的端口)。那么如何更改上面的映射以包含nginx服务器的端口?

1 个答案:

答案 0 :(得分:4)

我很确定这是因为这一行:

proxy_set_header Host $host;

我猜我会将Host标题设置为localhost。请参阅proxy_set_header上的文档。我认为这可以解决问题:

proxy_set_header Host $http_host;

它将传递客户端请求的Host标头,该标头应为localhost:8080

相关问题