2012-03-17 19 views
3

我爲我的項目主要使用node.js,我使用nodemon進行開發,使用forever進行生產。Node.js在永久和連接的虛擬主機/ nginx替代生產?

我通常在虛擬主機拆我的項目,所以我的結構可以是這樣的:

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啓動我定義的虛擬主機應用程序。

這樣一來我有每個虛擬主機在偵聽3000

我的問題它自己的端口和虛擬主機現在是,永遠監控的bootstrap.js,這有結果聽,如果有任何虛擬主機的失敗對於任何永遠的原因會重新啓動bootstra.js,這會導致其他虛擬主機不必要的重啓。

我的問題是在我的情況下最好的辦法是什麼?

我雖然代替具有一個bootstrap.js文件到具有這樣的結構:

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

並使用forever start那些根js文件中的每一個,在這種情況下,我將不被使用的虛擬主機但我相信鬼魂是某種方式,我需要他們。

不過,我覺得,在情況下,我滴連接的虛擬主機使用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的爲我的靜態內容而不是節點,這對節點來說是不必要的開銷。

您認爲如何?我是否正確或者你可以更好地向我推薦一些東西?

謝謝!

回答

1

我想你基本上回答了自己的問題有一個合理的答案,但你正在尋找一些替代品...

我不熟悉快遞虛擬主機的功能。但是,我認爲您需要在單個Node.js流程中運行3種不同的可擴展性需求的應用程序,以此來解決問題。

您仍然可以使用快速虛擬主機解決方案,使用child_process.fork啓動express的多個實例(所有這些實例都可以共享同一個http服務器)。

+1

yes以某種方式我回答了我自己的問題,我只需要一些確認,我並不真正瞭解子進程fork並感謝分享,但正如您所說,在多個節點應用程序之間共享相同的http服務器isn'做正確的最佳方式?還有一些類型的替代品我期望聽到的將是像nginx vs varnish或類似的東西,我只是說,爲了更清楚我做這個問題的原因:)感謝您付出努力回答:) – panosru 2012-03-21 23:16:31