dynamic子域路由

我在stackoverflow问这个问题,但得到了很less的意见: https : //stackoverflow.com/questions/2284917/route-web-requests-to-different-servers-based-on-subdomain

也许这更适合这个人群。 这里又是为了方便:

我有一个平台,用户可以使用子域创build一个新的网站。 将有成千上万的这些,例如abc.mydomain.com,def.mydomain.com。 希望如果我们成功了几十万。

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

这里有哪些最佳实践和推荐技术?

我看到一些选项:

  1. 使用通配符CNAME条目进行DNS设置,以便所有请求都转到单个IP,其中可能有两台使用检测信号(用于故障转移)的计算机知道如何在数据库中查找IP,然后执行httpredirect到相应的应用程序服务器。 这对我来说似乎笨重和缓慢。
  2. 运行我自己的DNS服务器,可以通过编程方式进行pipe理,以便在创build新站点时添加DNS条目。 我们还将网站移动到不同的应用程序服务器,所以我需要能够近乎实时地更新DNS条目。 思考任何人?

谢谢。

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

更新:根据下面的一些build议,似乎反向代理服务器(S)是要走的路。 由于我将重新平衡域 – >服务器映射,因此需要立即运行,而DNS解决scheme上的TTL可能会成为问题。 任何关于使用软件的build议,考虑这个域 – > IP数据存储在一个数据库,我需要这是性能?

鉴于您对服务器之间的实时故障切换的要求,我不能推荐基于DNS的解决scheme – 太多的客户端不会简单地发现更改。

所有这些服务器将在一个网站上? 可以访问客户 – >服务器映射表的弹性前端“反向代理”似乎是最简单的。

我会使用PowerDNS的第二个解决scheme,它是pipe道后端 ,你只需要编写一个软件,它能够读取查询,并通过一个非常简单的协议从stdin / stdout写入响应

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

subdomains.domain.com

怎么样的代理服务器设置。

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

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

所以path是:客户端 – >反向代理 – >后端服务器

hipache看起来正是你所需要的。 您可以dynamic地添加和删除子域,但只是添加和删除重做条目:

https://github.com/hipache/hipache