HAProxy 可以使用代表后端服务器的特定子域进行响应吗?

HAProxy 可以使用代表后端服务器的特定子域进行响应吗?

假设有人向 api.example.com/a/b 发出 HTTP get/post 请求

现在假设我已经设置了十台服务器作为后端服务器。

我想要一个代理充当负载均衡器,并且在请求期间,握手响应:

apiX.example.com/a/b

其中 X 是 1..10 范围内的数字

如果HAProxy这不是合适的工具,您会建议什么?

基于硬件的负载均衡器有哪些好处?

更新

一般来说,据我了解,代理HAProxy会接收请求,并将其代理到后端服务器,等待响应,然后将答案发送给客户端。客户端不知道哪个后端服务器响应了他们的请求。

现在,如果我有十台后端服务器,那么该HAProxy服务器将会超载,因为它必须处理 10 台服务器的流量/带宽的吞吐量,因为所有请求和响应都要经过该HAProxy服务器。

我很好奇是否HAProxy可以将请求交给特定的后端服务器,然后客户端将直接与后端服务器对话(后端将在 api3.example.com 或 api[1..10].example.com 上公开访问)

客户端将只发出一个请求,因此会话将只持续一个应用程序,其中客户端发出 HTTP get/post 请求并等待响应,就是这样。

答案1

这可能可行也可能不可行,具体取决于您的设置。如果您的客户端配置为使用代理服务器(即 HAproxy)或您始终将所有请求透明地代理到 HAproxy,那么显然您的想法无法实现。

另一方面,如果名称 api.example.com 指向 Haproxy 主机本身。您可以使用它redirect向您的客户端发送 302 HTTP 代码。重定向应指向后端服务器之一。然后,您需要找到一种方法,redirect根据某些标准对不同的后端服务器使用不同的语句。您可以选择随机变化的内容,例如源端口或源 IP。

答案2

您是否考虑过让您的后端服务器在响应中附加一个带有服务器 ID/主机名的标头?

更新于 2012 年 10 月 8 日:HAProxy 1.4.20 添加了一个选项 http-send-name-header,它将后端服务器添加为响应中的主机名。

相关内容