2012-02-23 62 views
2

因此,我在nginx.conf中指向node.js应用程序时设置了一个虚拟路径。相关部分看起来像这样:除非我明确应用程序调用重定向Express.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的,所以网址到节点的应用程序的根的样子:

http://localhost:8080/app 

当我打电话从快递一个res.redirect('/app'),实际重定向去:

http://localhost/app 

因为什么都没有在端口80上运行,显然,这失败了。我也无法找到请求对象的任何属性,这些属性可以让我将URL构建为绝对URL。任何想法硬编码或使其成为环境变量?

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

回答

4

我敢肯定,这是因为这行:

proxy_set_header Host $host; 

这将设置Hostlocalhost我猜。请参阅proxy_set_header的文档。我认为这会做的伎俩:

proxy_set_header Host $http_host; 

它会把来自客户端的请求,这应该是localhost:8080Host头。

+0

完美,就是这样。谢谢! – Paul 2012-02-24 16:00:02