HOST header 在多层基础设施中的价值应该是多少?

What should be the value of HOST header in a multi layer infrustructure?

我正在尝试更好地理解 HOST header。我提出了一个我不确定其正确答案的问题。假设我的 Servlet 容器和互联网之间有几个节点 (machines/apps),如下所示:

Internet ---> first load balancer ---> a monitoring server/application ---> second load balancer ---> my HTTP Servlet contianer

调用 HttpServletRequest.getHeader("host") 时应该得到什么值?应该是“第一个负载均衡器”的主机名还是“第二个负载均衡器”的主机名?

答案是“视情况而定”。这取决于您的 HTTP servlet 容器。

如果配置为侦听主机“your-public-site.com”,就像您的第一个负载均衡器一样,第二个负载均衡器有一个可以响应请求的服务器的 IP 地址池“ your-public-site.com",请求可能如下所示:

GET / HTTP/1.1
Host: your-public-site.com

但已连接到 IP 地址。负载平衡服务器也可以称为“appsrv01.internal.lan”、“appsrv02.internal.lan”等,然后 that 就是您所看到的。

所有这些当然假设第二个负载平衡器配置正确并且知道响应请求的实际服务器将响应的主机名。

因此:您得到的 header 是您配置的主机名。