2011-03-07 23 views
1

我有一個要求。取決於使用不同模塊的HOST頭,就像使用expressjs的www.myhost.com和使用基本nodejs https.createServer()的* .h.myhost.com。他們在同一個港口工作。我可以路由快遞控制器和基本nodejs服務器在單獨模塊

https.createServer(options,function(req, res){ 
    if(req.host === "www.myhost.com"){ 
     express.handle(req,res) //what I hope 
     return 
    } 
    //handle by normal way 
}) 

如何做到這一點?

回答

5

你可以使用nodejitsu的node-http-proxy。我用它來部署和配置在不同子域下運行的多個應用程序。

例子:

var express = require('express'), 
    https = require('https'), 
    proxy = require('http-proxy'); 

// define proxy routes 
var options = { 
    router: { 
    'www.myhost.com': '127.0.0.1:8001', 
    '*.h.myhost.com': '127.0.0.1:8002' 
    } 
}; 

// express server for www.myhost.com 
var express = express.createServer(); 

// register routes, configure instance here 
// express.get('/', function(res, req) { }); 

// start express server 
express.listen(8001); 

// vanilla node server for *.h.myhost.com 
var vanilla = https.createServer(options,function(req, res){ 
    // handle your *.h.myhost.com requests 
}).listen(8002); 

// start proxy 
var proxyServer = httpProxy.createServer(options); 
proxyServer.listen(80); 

我不知道在HTTP代理服務器路由表(* .h.myhost.com)使用通配符,但由於這些值轉換爲節點 - 正則表達式http-proxy,我假設他們工作。

+0

您測試過該解決方案嗎?會很有趣,看看它是否工作... – schaermu 2011-03-11 11:38:58

+0

不,但感謝偉大的節點HTTP代理。我使用express vhost來解決我的問題。 – 2011-03-21 02:52:47