Node.js:带有CNAMElogging的url路由

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

Web框架是express

那么express或node.js中的任何中间件都可以这样做吗?

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

 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

无论如何,你需要像nginx这样的代理,如果你的2节点应用托pipe在同一个主机上。

 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