nginx代理到远程node.js表达子目录中的app

时间:2016-09-28 17:50:02

标签: node.js express nginx proxy

我完全陷入了一种情况,我想在一台服务器上安装多个节点应用程序。通过让应用程序在不同的端口上运行,我可以正常工作。我可以通过输入带端口的IP地址来访问应用程序。

我想通过使用不同的子目录代理来自我的nginx服务器的应用程序:

my.domain

location /app1 {
  proxy_pass http://10.131.6.181:3001;
}
location /app2 {
  proxy_pass http://10.131.6.181:3002;
}

这样做我必须将所有快递路线移到/ app1 for application1。这有效,但现在我被静态文件困住了。

我现在可以使用http://10.131.6.181:3001/app1访问该应用程序,这很棒,但是通过http://my.domain/app1未加载静态文件。

可以直接http://10.131.6.181:3001/css访问静态文件,但不能通过代理http://my.domain/css

访问

理想情况下,我希望将应用程序放在不同的端口上,而不在快速路由中使用子目录,而只在代理中使用子目录。我试着在过去的5个小时里把头穿过墙壁但是没有做任何事情。

现在我很高兴如果能通过nginx代理获得静态文件。

2 个答案:

答案 0 :(得分:2)

需要的人的最新答案:

代替

location /app1 {
  proxy_pass http://10.131.6.181:3001/app1;
}

使用

location /app1/ {
  proxy_pass http://10.131.6.181:3001/;
}

或者在本地

location /app1/ {
  proxy_pass http://localhost:3000/;
}

这是正确的方法,因此您无需修改​​express。 Express只会接收/ app1 /

之后的部分

答案 1 :(得分:1)

在谷歌激增之后我终于解决了这个问题。

我将目录添加到nginx proxy_pass

my.domain

location /app1 {
  proxy_pass http://10.131.6.181:3001/app1;
}
location /app2 {
  proxy_pass http://10.131.6.181:3002/app2;
}

我必须更改快速应用程序以使用子目录

app.use('/app1', express.static(path.join(__dirname, 'public')));

app.use('/app1'', require('./routes'));

在路由器中,我必须为所有重定向添加前缀。

router.get('/logout', function (req, res) {
  req.logout();
  res.redirect('/app1/login');
});

从html

中调用静态文件
<link rel="stylesheet" href="/app1/css/style.css"/>

更改所有重定向和静态网址有点痛苦。我确信通过在我的node-express app中设置全局变量有一种更聪明的方法。如果有人知道更简单的方法,请发布...