2013-08-21 48 views
0

很簡單,我正在使用Express的虛擬主機方法將請求路由到給定域名的相應腳本。我真的很喜歡這條路由,因爲這意味着我不需要爲每個虛擬主機腳本分別監聽單獨的node.js實例的端口,而且我也不需要爲每個虛擬主機提供一個進程。但是,使用這種方法對我來說存在明顯的缺陷。通過使用此方法,vhost服務器中的任何內容都具有root權限,而不僅僅是其腳本的用戶權限。我需要知道找一些沙盒或者以其他用戶身份運行虛擬主機服務器的方式。毋庸置疑,我無法擁有訪問根目錄的服務器上的特權較低的用戶。Node.js vhost作爲用戶

TL; DR,我可以通過哪種方法將請求路由到不同的域名關聯應用程序,而無需指定應用程序需要知道的端口,並仍然禁止該腳本的作者訪問超出它們自己的用戶帳戶?

回答

0

在我的應用程序中,我使用Bouncy

var bouncy = require("bouncy"); 

var server = bouncy(function(req, res, bounce) { 
    var port; 
    var subdomain = req.headers.host.split(".")[ 0 ]; 

    switch (subdomain) { 
     case "xyz": 
      port = 4002; 
      break; 

     default: 
      port = 4001; 
      break; 
    } 

    bounce(port); 
}); 

server.listen(4000); 

這種方式,你可以有各種應用不同端口上偵聽和不同的工藝。他們都將被代理的4000端口藏漢下工作,所以:

xyz.localhost:4002 = xyz.localhost:4000 
localhost:4001 = localhost:4000 

我希望它能幫助;)

+0

感謝您的時間,試圖回答我的問題。我對這種方法的擔心是每個應用都有自己的端口,因此應用需要在端口上監聽請求。例如,對於「xyz」子域,服務器實例需要在端口上進行偵聽,對吧?我不知道作者如何能夠確定爲他們的應用程序編程選擇的端口。 –

+0

我目前在同一個程序中有3個HTTP服務器。該應用程序有一些確定每個進程的端口的配置。這樣就不會太乾,而且我擁有這些服務器是因爲:RESTful API,CDN和一般HTML服務。另外,你將運行多少服務器? – gustavohenke