Node.js:带有CNAME记录的url路由

时间:2013-12-23 01:05:35

标签: node.js express url-routing

我想将example.orgcname.example.org映射到两个不同的node.js应用。 但是不要使用http网络服务器,例如nginx。

网页框架为express

那么express或node.js中是否有任何中间件可以做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您的2节点应用程序托管在同一主机上,则无论如何都需要像nginx这样的代理。

var request = require('request');    

var proxy = require('http').createServer(function (req, res) {    

    // distribute by request header 'host'
    var targetHost = req.headers.host;
    if (targetHost === 'example.org') {
      req.pipe(request('http://your-node-app1' + req.url)).pipe(res);
    } else if (targetHost === 'cname.example.org') {
      req.pipe(request('http://your-node-app2' + req.url)).pipe(res);
    } else { // not found or host is invalid
      res.statusCode = 404;
      res.end('host is not found!');
    }
});

proxy.listen(80); // assume it listens to port 80

答案 1 :(得分:1)

Express使用connect,所以你可以这样做:

var express = require('express'),
    app = express();

app.use(express.vhost('example.org', require('./exampleApp/')));
app.use(express.vhost('cname.example.org', require('./cnameExampleApp/')));

app.listen(80);

github上还有一个例子: https://github.com/visionmedia/express/tree/master/examples/vhost

这里是connect.vhost的参考: http://www.senchalabs.org/connect/vhost.html