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

Nginx Express.js使用虚拟路径重定向,nginx,express,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

因此,当指向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;
}
非常有效,除非我的express应用程序调用重定向

例如,dev box在端口8080上运行nginx,因此指向节点应用程序根目录的url如下所示:

http://localhost:8080/app
当我从express调用
res.redirect('/app')
时,实际的重定向将转到:

http://localhost/app
由于端口80上没有运行任何东西,显然,这会失败。我也找不到请求对象的任何属性,这些属性可以让我将URL构造为绝对URL。除了将其硬编码或使其成为环境变量之外,还有其他想法吗


*编辑:在进一步挖掘之后,在本例中,似乎主机头被定义为“localhost”,而如果我直接连接到expres应用程序,主机头被定义为“localhost:3000”(其中3000是节点应用程序正在侦听的端口)。那么,如何更改上面的映射以包含nginx服务器的端口呢?

我很确定这是因为这行代码:

proxy_set_header Host $host;
我想它会将
Host
标题设置为
localhost
。请参阅上的文档。我认为这会起作用:

proxy_set_header Host $http_host;

它将从客户端请求中传递
Host
头,该头应该是
localhost:8080

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

proxy_set_header Host $host;
我想它会将
Host
标题设置为
localhost
。请参阅上的文档。我认为这会起作用:

proxy_set_header Host $http_host;
它将从客户端请求传递
Host
头,该头应该是
localhost:8080