我们购买了 3 台 APACHE 服务器,并在这些服务器后面运行 Mysql 服务器。我们使用硬件负载平衡器来平衡对 Apache 服务器的请求。
我们的问题在于,我们为负载均衡器 (LB) 设置了规则,使其使用 Apache 服务器的主要公共 IP,这样平衡就会在组中按服务器进行。此外,要平衡的服务器上所有域的 A 记录都指向 LB 的 VIP。
现在的问题是,一旦有人访问 www.example.com,他们就会被转发到 LB(VIP 91.2.12.134),然后 LB 会将他们发送到 Apache 服务器 IP,即 101.1.1.134。现在的问题是,Apache 服务器现在无法将请求路由到 www.example.com 的域 IP,即 138.12.12.134。
我们如何管理来自主 Apache 服务器的多个域路由,这些服务器是从 LB 的 VIP 发送的请求?
提前致谢
答案1
需要更多信息才能继续,您能提供输出吗?
iptables -t nat -L 预路由
您是否使用第 7 层或 Later3/4 层硬件负载均衡器?
假设没有第 7 层,这可能只需要一个 DNAT 规则
iptables -t nat -I PREROUTING -d <VIP> -j DNAT --to-destination <local ip>
所以你的情况
iptables -t nat -I PREROUTING -d 91.2.12.134 -j DNAT --to-destination 101.1.1.134
负载均衡器不应该“发送”任何人到任何地方,它应该自己处理所有请求,你能否澄清是否是这种情况,或者负载均衡器上的规则是否发送了 httpd 重定向代码(例如 301/302)。
答案2
这些是哪种负载均衡器?负载均衡器和 Web 服务器之间有防火墙吗?
我知道在 F5 负载均衡器上,在类似于您描述的配置中,需要打开 SNAT。启用 SNAT 后,负载均衡器可以有效地代理最终用户和所选 Web 服务器之间的请求。实际上,负载均衡器代表最终用户发出请求,然后将响应返回给用户。证据是,您的 Web 服务器 access_logs 中的所有请求都充满了来自负载均衡器的请求,而不是直接来自最终用户 IP。
您希望负载均衡器成为您与最终用户之间的唯一联系点。最终用户永远不需要了解单个 Web 服务器。