1

我有一个要求。使用不同的模块依赖于 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
})

这个怎么做?

4

1 回答 1

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 中转换为正则表达式,我认为它们可以工作。

于 2011-03-07T09:40:07.243 回答