Nodejs:想要将域映射到服务器

7 node.js

我有一个webapp,我允许人们在我的应用服务器上创建子站点(例如:mysite.com/their-site).我希望他们能够将他们的域指向我的应用程序上的子站点.与您将域附加到共享托管服务器的方式类似.

我真的不确定如何解决这个问题.如果有人能够启发,我将不胜感激.

bry*_*mac 5

如果您使用节点http-proxynginx之类的东西,则可以在不同的本地端口上运行每个单独的站点,然后将域名映射回来.我使用http代理,但其他人喜欢nginx.

为此,您需要添加DNS条目,以解析运行反向代理的IP地址.然后,例如,端口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);
Run Code Online (Sandbox Code Playgroud)

您还可以使用路径进行路由.请看: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'
  }
};
Run Code Online (Sandbox Code Playgroud)

另一种选择是简单地为每个客户提供一个路由/页面,然后它只是一个DNS问题.您将设置DNS,以便所有域名解析为您的应用运行的一个IP地址.这有一些缺点:

  1. domain1.com/user1,domain1.com/user2,domain2.com/user1和domain2.com/user2将全部用于您可能不需要的工作.
  2. 你控制所有代码还是提供代码?如果它是用户提供的代码,那么您需要一些隔离,因此需要单独的应用程序.
  3. 你仍然可能需要一个http代理在linux上的端口80上运行而不是以sudo身份运行.