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



我试图更好地理解HOST头。我想出了一个问题,但我不确定它的正确答案。假设我有几个节点(机器/应用程序)在我的Servlet容器和互联网之间,如下所示:

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

调用HttpServletRequest.getHeader("host")时,我期望的值是什么?应该是"第一个负载均衡器"的主机名吗?或者"第二个负载均衡器"的主机名?

答案是"视情况而定"。这取决于你的HTTP servlet容器。

如果将其配置为侦听主机"your-publicsite.com",就像您的第一个负载平衡器一样,并且第二个负载平衡器有一个服务器IP地址池,可以响应对"your-publicsite.com"的请求,则请求可能看起来像这样:

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

但是通过IP地址连接。负载均衡服务器也可以被命名为"appsrv01.internal.lan"、"appsrv02.internal.lan"等等,然后就是您将看到的。

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

所以:你得到的头,是你配置的主机名。

最新更新