我有一个webapp,我允许人们在我的应用服务器上创建子站点(例如:mysite.com/their-site)。我希望他们能够将他们的域指向我的应用程序上的子站点。与将域附加到共享托管服务器的方式类似。
我不确定如何解决这个问题。如果有人能够启发我,我将不胜感激。
答案 0 :(得分:5)
如果您使用node http-proxy或nginx之类的内容,则可以在不同的本地端口上运行每个单独的站点,然后重新映射域名。我使用http代理,但其他人喜欢nginx。
要使其正常工作,您需要添加解析为运行反向代理的IP地址的DNS条目。然后,例如,端口80请求将映射回localhost:3000。
这允许每个应用程序独立运行,并在与其他站点不同的进程中运行。他们不能互相崩溃。您也没有两个应用程序声称相同路径的命名空间问题。
http代理的app.js如下所示:
var proxyPort = 80;
var http = require('http');
var httpProxy = require('http-proxy');
var options = {
router: {
'localhost': '127.0.0.1:3000',
'somesite.com': '127.0.0.1:3000',
'othersite.com': '127.0.0.1:4000'
}
};
console.log('Proxy Routing:');
console.log(options);
console.log();
var proxyServer = httpProxy.createServer(options);
proxyServer.listen(proxyPort);
console.log('Proxy listening on port ' + proxyPort);
您还可以使用路径进行路由。请参阅:https://github.com/nodejitsu/node-http-proxy/issues/232
更像是您的原始请求,您可以这样做:
router: {
'myhost.com/appA': '127.0.0.1:8080',
'myhost.com/appB': '127.0.0.1:9090/appB',
'myhost.com/appC': '127.0.0.1:9090/appC'
}
};
另一个选择是简单地为每个客户提供一个路由/页面,然后它只是一个DNS问题。您将设置DNS,以便所有域名解析为您的应用运行的一个IP地址。这有一些缺点: