我在 stackoverflow 上问了这个问题,但是浏览量很少:https://stackoverflow.com/questions/2284917/route-web-requests-to-different-servers-based-on-subdomain
也许它更适用于这个群体。为了方便起见,这里再次列出:
我有一个平台,用户可以在其中使用子域名创建新网站。会有数千个这样的网站,例如 abc.mydomain.com、def.mydomain.com。如果我们成功的话,希望会有数十万个。
我需要能够将这些域路由到不同的 IP 以指向特定的应用服务器。我现在在数据库中有此映射。
这里的最佳实践和推荐的技术是什么?
我看到几个选项:
- 使用通配符 CNAME 条目设置 DNS,以便所有请求都转到单个 IP,其中可能两台使用心跳(用于故障转移)的机器知道如何在数据库中查找 IP,然后执行 http 重定向到相应的应用服务器。这对我来说似乎很笨重且缓慢。
- 运行我自己的 DNS 服务器,该服务器可以通过编程进行管理,这样当创建新站点时就会添加 DNS 条目。我们还将站点移动到不同的应用服务器,因此我需要能够近乎实时地更新 DNS 条目。有人有想法吗?
谢谢。
更新2:我已设置指向 HAProxy Web 服务器的外部通配符 DNS,该服务器的作用是将请求路由到后端服务器。映射存储在我们的内部 PowerDNS 服务器中。现在的问题是如何让 HAProxy 服务器(或其他服务器)使用内部 DNS 的值,而不是某些配置文件或访问列表?–
更新:根据以下一些建议,反向代理服务器似乎是可行的方法。由于我将重新平衡域->服务器映射,因此这些需要立即工作,而 DNS 解决方案上的 TTL 可能会成为问题。考虑到此域->IP 数据存储在数据库中,并且我需要它来提高性能,有没有关于使用软件的建议?
答案1
考虑到您对服务器之间实时故障转移的要求,我不推荐基于 DNS 的解决方案——太多客户端根本无法发现变化。
所有这些服务器都要放在一个站点上吗?具有访问客户 -> 服务器映射表的弹性前端“反向代理”似乎是最简单的。
答案2
答案3
如果我直接理解的话,你会有很多:
subdomains.domain.com
那么代理服务器设置怎么样?
在 DNS 中,您为 *.domain.com 设置通配符并将其指向您的反向代理服务器。
在您的反向代理上,运行您自己的 DNS 或使用主机文件将请求映射到适当的后端服务器。
因此路径将是:客户端-->反向代理--->后端服务器
答案4
hipache 似乎正是您所需要的。您可以动态添加和删除子域,但只需添加和删除 redis 条目: