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

M. *_*sha 5 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/ 第二个应用程序.

谢谢.

Mir*_*toš 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);
Run Code Online (Sandbox Code Playgroud)

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

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

在另一方面,我的解决办法可能是更容易管理(你只有一个节点的过程,而不是nginx的+每个应用节点进程),并允许您配置这两个应用共享的中间件.

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

root.use('/app1', app1);
root.use('/app2', app2);
root.listen(3000);
Run Code Online (Sandbox Code Playgroud)


fis*_*ben 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
  }
}
Run Code Online (Sandbox Code Playgroud)

nginx还支持传递查询字符串,路径和其他所有东西,但我会把它放在一起把它们放在一起:)

查看nginx 的代理服务器文档.