【问题标题】:Express.js redirect with virtual pathExpress.js 使用虚拟路径重定向
【发布时间】:2012-02-23 20:42:06
【问题描述】:

所以我在 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 应用调用重定向。

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

http://localhost:8080/app

当我从 express 中调用 res.redirect('/app') 时,实际重定向到:

http://localhost/app

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

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

【问题讨论】:

    标签: nginx express


    【解决方案1】:

    我很确定是因为这条线:

    proxy_set_header Host $host;
    

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

    proxy_set_header Host $http_host;
    

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

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多