我想将example.org
和cname.example.org
映射到两个不同的node.js应用。
但是不要使用http网络服务器,例如nginx。
网页框架为express
。
那么express或node.js中是否有任何中间件可以做到这一点?
答案 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