DNS 和 IP 之间的负载平衡差异 - 转发与重定向

网络工程 防火墙 加强
2021-07-17 20:30:01

我遇到了一个我无法理解的情况。我们有一个 Fortigate 防火墙,可以在两个后端 Apache Web 服务器之间进行负载平衡。然后将 DNS 名称映射到负载均衡器上的虚拟 IP。

正如预期的那样,当您浏览到DNS名称/URL(例如 www.something.com)时,负载均衡器会从后端 Apache Web 服务器之一提供一个页面。浏览器中的 URL 保持为 www.something.com据我了解,在这种情况下,负载均衡器只是在浏览器和 Apache 之间转发数据包,同时始终保持在路径中。

但是,如果我浏览到DNS 映射到的IP 地址,负载均衡器将返回一个 HTTP 302 Found,Location 标头设置为其中一个 Apache 的 DNS URL。浏览器中的 URL 更改为后端服务器 DNS。

为什么负载均衡器在通过 IP 查询时重定向,但在通过 DNS 名称查询时正确转发路径内。

2个回答

我没有使用 Fortigate FW 进行负载均衡,所以我会更笼统地回答一些问题。

首先,对于您的问题,负载平衡器的工作完全符合预期,我认为您的服务器可能未正确配置以响应对其 IP 地址的请求。如果您要在负载平衡后面进行测试,您可以在本地客户端的主机文件中设置域名,在服务器的防火墙后面,并使用域名和内部 IP 访问它。您可能会得到与现在相同的结果。

我的猜测是您打开了虚拟主机(以支持单个服务器上的多个域)并且“默认”不提供与您的域相同的页面。在这两种情况下,您都会从服务器获取一个网页。如果您在配置 Web 服务器方面需要帮助,您可能需要尝试使用ServerFault

其次,要深入一点。负载均衡器通常在 L7 上运行,至少适用于 HTTP 和 HTTPS 集群。这意味着他们不只是查看 IP 地址并转发它,也不“重定向”页面。

当他们收到请求时,他们实际上会解析请求并在处理请求后将其转发到服务器。在这一点上,他们可以做很多事情,例如在两个方向重写标头,可能将 cookie(用于持久性)添加到返回客户端的数据中,终止 SSL 会话,基于 URL 进行匹配等。

我建议您花一些时间充分阅读供应商文档,以更好地了解负载平衡的工作原理(使用 Fortigate,您可以阅读他们的和 Coyote Point(Fortigate 收购的另一家负载平衡公司)的文档。了解它正在做什么将在这种情况下为您提供帮助,并允许您解锁您没有意识到存在的功能。

在阅读Fortigate 负载平衡文档中的基于 HTTP 主机的负载平衡之后,我可以看到您如何拥有可能导致您描述的内容的非典型负载平衡配置。但是,如果没有您的部分配置,我们无法确定您是否属于这种情况。

Fortigate FortiOS 允许创建一个与真实服务器绑定的虚拟服务器,每个真实服务器都有不同的主机头配置如果任何请求与您的虚拟服务器的 VIP 匹配,负载平衡的请求将只发送到匹配的真实服务器host header可以很好地解释您的症状的最重要的部分是,其中一个 Real Server 可以省略主机标头,因此它可以匹配任何主机标头。

没有主机头的 Real Server 可能被配置为一种“包罗万象”的东西,它位于执行重定向的站点上。

使用下面的示例,只有第一个和第二个 rserver 处理通过主机标头与您的首选 DNS 名称匹配的流量,但第三个 rserver 接受与所有其他主机标头(包括 DNS VIP 本身)匹配的任何内容,并将其发送到可以进行重定向的站点.

配置防火墙vip
 编辑“http-host-ldb”
  设置类型服务器负载平衡
  设置extip 192.0.2.1
  设置extintf“局域网”
  设置服务器类型 http
  设置 ldb-method http-host
  设置导出 80
  配置真实服务器
    编辑 1
      设置 http 主机“www.example.com”
      设置ip 192.168.2.1
      设置端口 80
      下一个
    编辑 2
      设置 http 主机“www.example.com”
      设置ip 192.168.2.2
      设置端口 80
      下一个
    编辑 3
      设置ip 192.168.2.3
      设置端口 80
      下一个
    结尾
 结尾

我想防火墙负载平衡可能会自己进行重定向,但我们无法通过提供的有限信息来判断。