动态子域路由

动态子域路由

我在 stackoverflow 上问了这个问题,但是浏览量很少:https://stackoverflow.com/questions/2284917/route-web-requests-to-different-servers-based-on-subdomain

也许它更适用于这个群体。为了方便起见,这里再次列出:

我有一个平台,用户可以在其中使用子域名创建新网站。会有数千个这样的网站,例如 abc.mydomain.com、def.mydomain.com。如果我们成功的话,希望会有数十万个。

我需要能够将这些域路由到不同的 IP 以指向特定的应用服务器。我现在在数据库中有此映射。

这里的最佳实践和推荐的技术是什么?

我看到几个选项:

  1. 使用通配符 CNAME 条目设置 DNS,以便所有请求都转到单个 IP,其中可能两台使用心跳(用于故障转移)的机器知道如何在数据库中查找 IP,然后执行 http 重定向到相应的应用服务器。这对我来说似乎很笨重且缓慢。
  2. 运行我自己的 DNS 服务器,该服务器可以通过编程进行管理,这样当创建新站点时就会添加 DNS 条目。我们还将站点移动到不同的应用服务器,因此我需要能够近乎实时地更新 DNS 条目。有人有想法吗?

谢谢。

更新2:我已设置指向 HAProxy Web 服务器的外部通配符 DNS,该服务器的作用是将请求路由到后端服务器。映射存储在我们的内部 PowerDNS 服务器中。现在的问题是如何让 HAProxy 服务器(或其他服务器)使用内部 DNS 的值,而不是某些配置文件或访问列表?–

更新:根据以下一些建议,反向代理服务器似乎是可行的方法。由于我将重新平衡域->服务器映射,因此这些需要立即工作,而 DNS 解决方案上的 TTL 可能会成为问题。考虑到此域->IP 数据存储在数据库中,并且我需要它来提高性能,有没有关于使用软件的建议?

答案1

考虑到您对服务器之间实时故障转移的要求,我不推荐基于 DNS 的解决方案——太多客户端根本无法发现变化。

所有这些服务器都要放在一个站点上吗?具有访问客户 -> 服务器映射表的弹性前端“反向代理”似乎是最简单的。

答案2

我会采用第二种解决方案PowerDNS而且它管道后端你只需要编写一个软件,它可以通过漂亮的简单的协议

答案3

如果我直接理解的话,你会有很多:

subdomains.domain.com

那么代理服务器设置怎么样?

在 DNS 中,您为 *.domain.com 设置通配符并将其指向您的反向代理服务器。

在您的反向代理上,运行您自己的 DNS 或使用主机文件将请求映射到适当的后端服务器。

因此路径将是:客户端-->反向代理--->后端服务器

答案4

hipache 似乎正是您所需要的。您可以动态添加和删除子域,但只需添加和删除 redis 条目:

https://github.com/hipache/hipache

相关内容