NodeJS Express - 同一端口上的两个 NodeJS 实例(vhost)
NodeJS Express - Two NodeJS instances on same port (vhost)
我正在尝试从不同的 server.js
文件(不同的目录、配置等)在同一端口和服务器上 运行 2 个 NodeJS 实例。我的服务器提供商给了我一个信息,即 vhost
是 运行ning 对于不同的域,这是一个问题。如何在 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
,所以虚拟主机在这里不起作用。
你知道怎么解决吗?
您只能让一个进程侦听一个端口,不仅在 Node.js 中,而且在一般情况下(除了此处不适用的例外情况)。
您可以通过以下两种方式之一实现您的需求:
合并节点应用程序
您可以将应用程序合并为一个应用程序,监听一次,然后将对每个主机的请求转发到单独的代码位 - 如果您仍然想实现代码分离,单独的代码位可以是 NPM 模块,它们实际上是独立编写和维护。
使用网络服务器代理请求
您可以 运行 某些空闲端口(例如 5000 和 5001)上的 2 个节点进程,并使用网络服务器根据主机自动将请求转发给它。为此,我建议使用 Nginx,因为它的代理功能设置起来相对容易,而且功能强大。它在不使用太多系统资源方面也相当出色。 Apache 和其他软件也可以用于此,但我的个人 偏好是 Nginx。
结论
我的建议是您安装网络服务器并将公开端口上的请求转发到单独的 运行ning 节点进程。我实际上建议您 运行 将代理节点作为项目的默认节点,并且只在特殊情况下直接公开它。如果您的应用程序已经涉及强化服务器设置,您将获得很多配置选项、安全性和可扩展性优势。
我正在尝试从不同的 server.js
文件(不同的目录、配置等)在同一端口和服务器上 运行 2 个 NodeJS 实例。我的服务器提供商给了我一个信息,即 vhost
是 运行ning 对于不同的域,这是一个问题。如何在 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
,所以虚拟主机在这里不起作用。
你知道怎么解决吗?
您只能让一个进程侦听一个端口,不仅在 Node.js 中,而且在一般情况下(除了此处不适用的例外情况)。
您可以通过以下两种方式之一实现您的需求:
合并节点应用程序
您可以将应用程序合并为一个应用程序,监听一次,然后将对每个主机的请求转发到单独的代码位 - 如果您仍然想实现代码分离,单独的代码位可以是 NPM 模块,它们实际上是独立编写和维护。
使用网络服务器代理请求
您可以 运行 某些空闲端口(例如 5000 和 5001)上的 2 个节点进程,并使用网络服务器根据主机自动将请求转发给它。为此,我建议使用 Nginx,因为它的代理功能设置起来相对容易,而且功能强大。它在不使用太多系统资源方面也相当出色。 Apache 和其他软件也可以用于此,但我的个人 偏好是 Nginx。
结论
我的建议是您安装网络服务器并将公开端口上的请求转发到单独的 运行ning 节点进程。我实际上建议您 运行 将代理节点作为项目的默认节点,并且只在特殊情况下直接公开它。如果您的应用程序已经涉及强化服务器设置,您将获得很多配置选项、安全性和可扩展性优势。