【问题标题】:Nodejs: want to map domains to serverNodejs:想要将域映射到服务器
【发布时间】:2013-08-06 01:24:49
【问题描述】:

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

我真的不知道该怎么做。如果有人能启发我,将不胜感激。

【问题讨论】:

  • 您是否将这些指向不同的 Node.js 实例?还是所有相同的应用程序?
  • 您在示例中提到的内容令人困惑:mysite.com/their-site 不会位于单独的域中,它是不同的路径。您通常拥有domain.com 之类的域和mail.domain.com 之类的子域。你想重定向这些请求还是处理它们?
  • @user568109 很抱歉造成混乱。 mysite.com/their-site 将是他们在我的应用程序上的页面。他们可能在其他地方注册了自己的域,我希望他们可以选择将其映射到我网站上的页面。
  • @Brad 这个应用程序多个域将指向
  • 拥有一个所有域都解析的应用程序有缺点 - 请参阅我的帖子的后半部分。

标签: node.js


【解决方案1】:

如果您使用node http-proxynginx 之类的东西,您可以在不同的本地端口上运行每个单独的站点,然后将域名映射回来。我使用 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 地址。这有一些缺点:

  1. domain1.com/user1、domain1.com/user2、domain2.com/user1 和 domain2.com/user2 都可以正常工作,但您可能不希望这样做。
  2. 您控制所有代码还是他们提供代码?如果是用户提供的代码,那么您需要一些隔离,因此需要单独的应用程序。
  3. 您可能仍然需要一个 http 代理才能在 linux 的 80 端口上运行,而不是作为 sudo 运行。

【讨论】:

  • 就我而言,我认为我正在将域设置为路由。那么这样的事情是否会奏效:'user1domain.com': '127.0.0.1:9090/user1page'?
  • 如果我计划将 100 多个域映射到此应用程序,这也是首选方法吗?
  • 是的,应该可以正常工作。 100+ 不会是问题 - 当然这完全取决于每个域的负载和资源需求。好的是路由还意味着您可以根据需要扩展到多个盒子。
  • 好的,这就是我要尝试的。我应该让他们的注册商指向什么?我需要让他们更改名称服务器吗?在代理之后,子路由是否仍然可以与它们的域一起使用? (例如:user1domain.com/account)。抱歉之前从未使用过任何反向代理。
  • 他们不必更改名称服务器 - 但无论他们的注册点在哪里,都需要 DNS 编辑。如果他们希望您能够管理它,那么如果一个 DNS 服务器/公司上的所有条目都可以更容易管理。
猜你喜欢
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多