我有一个要求。使用不同的模块依赖于HOST头,就像使用expressjs的www.myhost.com和使用基本nodejs https.createServer()的* .h.myhost.com一样。它们在同一个港口工作。
https.createServer(options,function(req, res){
if(req.host === "www.myhost.com"){
express.handle(req,res) //what I hope
return
}
//handle by normal way
})
怎么做?
答案 0 :(得分: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-proxy路由表(* .h.myhost.com)中使用通配符,但由于这些值在node-http-proxy中转换为正则表达式,我认为它们有效。 / p>