Node.js 在生产环境中使用 Forever 和 connect 的 vhosts / nginx 替代方案?

问题描述 投票:0回答:1

我的项目主要使用 Node.js,我使用

nodemon
进行开发,使用
forever
进行生产。

我通常将我的项目拆分为虚拟主机,因此我的结构可能是这样的:

bootstrap.js
apps/
  admin/
  front/
  api/

我的 bootstrap.js 看起来像这样:

// Get Express
var express = require('express');

// Create express server
var app = express.createServer();

// Configure Development Environment
app.configure('development', function() {
  //app.use(express.vhost('localhost', require('./apps/front')));
  app.use(express.vhost('localhost', require('./apps/admin')));
  app.use(express.vhost('localhost', require('./apps/api')));
  app.listen(3000);
});

// Configure Production Environment
app.configure('production', function() {
  app.use(express.vhost('example.com', require('./apps/front')));
  app.use(express.vhost('admin.example.com', require('./apps/admin')));
  app.use(express.vhost('api.example.com', require('./apps/api')));
  app.listen(80);
});

当我想启动我的应用程序时,我使用

forever start bootstrap.js
bootstrap.js
启动我定义的虚拟主机应用程序。

通过这种方式,我让每个虚拟主机在它自己的端口上监听,而虚拟主机在 3000 上监听。

我现在的问题是永远监控 bootstrap.js,结果是,如果任何虚拟主机因任何原因永远失败,将重新启动 bootstra.js,这也会导致其他虚拟主机不必要的重新启动。

我的问题是,就我的情况而言,最好的方法是什么?

我想用一个 bootstrap.js 文件来代替这样的结构:

admin.js
front.js
api.js
apps/
  admin/
  front/
  api/

并对每个根 js 文件使用

forever start
,在这种情况下,我不会使用虚拟主机,但我相信虚拟主机以某种方式需要它们。

我认为万一我放弃连接的虚拟主机以使用 nginx 并为每个应用程序进行以下配置:

server
{
    listen 80;
    server_name admin.example.com;

    access_log /var/log/nginx/admin.example.com.access.log;

    error_log /var/log/nginx/admin.example.com.error.log;

    root /home/panosru/domains/example.com/apps/admin/public;

    location ~* ^.+\.(svg|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
        root /home/panosru/domains/example.com/apps/admin/public;
    }

    location / {
        proxy_pass http://admin.example.com:3001;
    }
}

我可以看到,使用 nginx 我有更多的好处,比如我使用 nginx 来服务我的静态内容而不是节点,这对节点来说是不必要的开销。

你觉得怎么样?我是对的还是你可以向我推荐更好的东西?

谢谢!

node.js express nginx vhosts node.js-connect
1个回答
1
投票

我认为你基本上用合理的答案回答了你自己的问题,但你正在寻找一些替代方案......

我不熟悉express中的vhost功能。然而,我认为在单个 Node.js 进程中运行 3 个具有 3 种不同可扩展性需求的不同应用程序实际上是在自找麻烦。

您仍然可以使用express vhosts解决方案,通过使用child_process.fork来启动多个express实例(所有这些实例仍然可以共享同一个http服务器)。

© www.soinside.com 2019 - 2024. All rights reserved.