如何在同一台服务器上运行多个StrongLoop LoopBack应用程序?

时间:2014-03-27 04:35:24

标签: node.js strongloop loopbackjs

我目前在具有不同端口的单个服务器上运行两个 StrongLoop LoopBack 应用(Nodejs应用)。这两个应用都是使用命令行中的slc lb projectslc lb model创建的。

是否可以在具有不同路径和/或子域的单个端口上运行这些应用程序?如果是,我该如何在Linux机器上执行此操作?

示例:

第一个应用

http://api.server.com:3000/app1/

第二个应用

http://api.server.com:3000/app2/

感谢。

2 个答案:

答案 0 :(得分:10)

由于LoopBack应用程序是常规Express应用程序,因此您可以将它们安装在主应用程序的路径上。

var app1 = require('path/to/app1');
var app2 = require('path/to/app2');

var root = loopback(); // or express();
root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);

明显的缺点是app1和app2之间的高运行时耦合 - 无论何时升级它们中的任何一个,都必须重新启动整个服务器(即它们两者)。此外,一个应用程序中的致命故障会导致整个服务器崩溃。

@fiskeben提供的解决方案更加强大,因为每个应用程序都是隔离的。

另一方面,我的解决方案可能更容易管理(您只有一个Node进程而不是nginx +每个应用程序节点进程),并且还允许您配置两个应用程序共享的中间件。

var root = loopback();
root.use(express.logger());
// etc.

root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);

答案 1 :(得分:6)

您需要在服务器前面使用某种代理,例如nginx。 nginx将侦听一个端口(例如80),并根据您定义的某些规则(主机名,路径,标头等)将传入请求重定向到计算机上的其他服务器。

我没有关于nginx的专家,但我会配置如下:

server {
  listen: 80;
  server_name api.server.com;
  location /app1 {
    proxy_pass http://localhost:3000
  }
  location /app2 {
    proxy_pass http://localhost:3001
  }
}

nginx还支持传递查询字符串,路径和其他所有内容,但我会让您将这些内容放在一起:)

查看proxy server documentation的nginx。