我目前在具有不同端口的单个服务器上运行两个 StrongLoop LoopBack 应用(Nodejs应用)。这两个应用都是使用命令行中的slc lb project
和slc lb model
创建的。
是否可以在具有不同路径和/或子域的单个端口上运行这些应用程序?如果是,我该如何在Linux机器上执行此操作?
示例:
第一个应用 http://api.server.com:3000/app1/
。
http://api.server.com:3000/app2/
。
感谢。
答案 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。