Node.js Express如何管理多个域名?

3
我有两个域名,例如example0.org和example1.org。如何使用express设置nodejs来管理它们两个?例如,我想分享"/publicexample0"文件夹作为"example0.org"的根目录,同时将"/publicexample1"文件夹作为"example1.org"的根目录。这只适用于一个域名:
var app = express.createServer();
app.get('/', function(req, res) {
    res.send('Hello World');
});
app.listen(3000);

如何将其隐藏在Apache虚拟主机后面,将domain1重定向到path1,将domain2重定向到path2,在同一节点服务器上? - Oleg Sklyar
@OlegS。我认为在同一台机器上同时使用Apache和Node.js不是一个好主意。 - Vyacheslav
为什么那不是一个好主意? - Oleg Sklyar
实际上,我会在不同的端口上运行两个独立的节点服务器,并在单个标准端口上通过虚拟主机为两个独立的域名提供服务。这有什么问题吗?事实上,关于这个问题实际上有一个非常明智的答案,支持我的想法:https://dev59.com/S27Xa4cB1Zd3GeqPrpu_#14939308 - Oleg Sklyar
1个回答

3
我想你可以利用HTTP主机头。它包含以下内容:
服务器的域名(用于虚拟主机),以及服务器正在侦听的TCP端口号。如果端口是所请求服务的标准端口,则可以省略端口号。自HTTP/1.1强制使用。
你可以在RFC 2616 - HTTP v1.1中查看其规范。
显然,你可以从Express的请求中读取头信息,并根据其值做出决策。
router.get('/hello', function(req, res){
   var host = req.get('host');
   if(host === 'example0.org'){
    res.send(200,'Welcome from example0.org');
   } else if(host === 'example1.org'){
    res.send(200,'Welcome from example1.org');
   } else {
    res.send(200,'Welcome stranger');
   }
});

所有请求都有reg.get('host')值吗?即使我只发送简单的URL请求? - Vyacheslav
@trololo 你读了我上面分享的RFC文档吗?你的答案在“host”部分。 - Edwin Dalorzo
好的。明白了。如何管理静态文件夹?app.use("/", express.static(__dirname + '/public')); 适用于两个域名吗? - Vyacheslav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接