Node.js 在生产中使用 forever 和 connect 的 vhosts / nginx 替代品?



我的项目主要使用node.js,开发使用nodemon,生产使用forever

我通常把我的项目分成vhosts,所以我的结构可以是这样的:

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.jsbootstrap.js启动我定义的vhost应用程序。

通过这种方式,我让每个vhost在自己的端口上监听,让vhost在3000上监听。

我现在的问题是,forever monitor的bootstrap.js,因此,如果任何一个vhosts因任何原因失败,forever都将重新启动bootstra.js,这也将导致其他vhosts不必要的重新启动。

我的问题是,在我的情况下,最好的方法是什么?

我不认为有一个bootstrap.js文件有这样的结构:

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

并对每个根js文件使用forever start,在这种情况下,我不会使用vhosts,但我相信vhosts在某种程度上是我需要的。

我想,如果我放弃connect的vhosts来使用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来服务我的静态内容,而不是节点,这对节点来说是不必要的开销。

你觉得怎么样?我说得对吗?还是你可以给我提个更好的建议?

谢谢!

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

我不熟悉express中的vhost功能。然而,我认为在一个Node.js进程中运行3个具有3种不同可扩展性需求的不同应用程序会带来麻烦。

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

最新更新