NodeJS Express - 同一端口上的两个NodeJS实例(vhost)

时间:2018-03-07 08:36:53

标签: node.js express port vhosts express-vhost

我试图在不同的server.js文件(不同的dir,配置等)上在同一个端口和服务器上运行2个NodeJS实例。我的服务器提供商向我提供了vhost正在针对不同域运行的信息,并且存在问题。如何在NodeJS Express应用程序中处理它?我曾尝试使用https://github.com/expressjs/vhost中的vhost

const app = express();
const vhost = require('vhost');

app.use(vhost('example1.org', app));

// Start up the Node server
app.listen(4100, () => {
  console.log(`Node server listening on 4100`);
});

对于那样的第二次申请:

const app = express();
const vhost = require('vhost');

app.use(vhost('example2.org', app));

// Start up the Node server
app.listen(4100, () => {
  console.log(`Node server listening on 4100`);
});

但是当我尝试运行第二个实例时,我得到了EADDRINUSE ::: 4100,所以vhost在这里没有工作。

enter image description here

你知道怎么解决吗?

1 个答案:

答案 0 :(得分:2)

您只能有一个进程侦听一个端口,而不仅仅是Node.js,但一般情况下(有一些不适用于此处的例外情况)。

您可以通过以下两种方式之一实现所需:

合并节点应用

您可以将应用程序放入一个应用程序,监听一次,然后将每个主机的请求转发到单独的代码位 - 如果您仍希望实现代码分离,则单独的代码位可以是实际编写的NPM模块,保持孤立。

使用网络服务器代理请求

您可以在某个空闲端口(例如5000和5001)上运行2节点进程,并使用网络服务器根据主机自动转发请求。我建议使用Nginx,因为它的代理功能相对容易设置,而且功能强大。它也非常擅长不使用太多的系统资源。 Apache和其他人也可以用于此,但我的个人首选项将是Nginx。

结论

我的建议是安装Web服务器并将公开端口上的请求转发到单独运行的节点进程。我实际上建议您在代理服务器后面运行节点作为项目的默认设置,并且只在激发情况下直接公开它。如果您的应用程序已经涉及强化的服务器设置,那么您将获得许多配置选项,安全性和可伸缩性优势。

相关问题