5

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

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

例子:

http://api.server.com:3000/app1/对于第一个应用程序。

http://api.server.com:3000/app2/第二个应用程序。

谢谢。

4

2 回答 2

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 + per-app Node 进程),并且还允许您配置两个应用程序共享的中间件。

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

root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);
于 2014-03-27T09:09:54.770 回答
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 还支持传递查询字符串、路径和其他所有内容,但我将由你来把它们放在一起:)

查看 nginx 的代理服务器文档

于 2014-03-27T06:36:25.570 回答