我有2个Web服务器在负载平衡环境和两个Web服务器有2个Web应用程序部署在他们的tomcat服务器。两个不同的域名被用来访问这两个Web应用程序。
我遇到了一个情况,我必须在两个Web服务器上分别为两个Web应用程序重新加载一些东西。所以我必须向每个Web服务器和每个Web应用程序发送http请求来重新加载(基本上我想绕过负载平衡器)。
有没有办法添加一个HTTP头,这样我就可以在运行时向特定的Web服务器发送请求,以指定域名?或者有没有其他方法可以实现这一点?
注意:这个HTTP请求可以从部署在任何一个Web服务器上的java代码发出,所以基本上我们可以假设它是局域网内Web服务器之间的通信。
2条答案
按热度按时间2admgd591#
我觉得这个问题很奇怪。
如果您有一个负载平衡器,这意味着您在两个后端服务器之间分配负载,即部署相同应用程序的服务器和必须一致的服务器,这意味着两个部分必须具有完全相同的数据库(因为同一客户端可以在一个连接中从一个服务器服务,也可以在下一个请求中从另一个服务器服务,这取决于负载平衡器的配置)。
因此,在这种情况下,由于两个部分 * 应该 * 保持同步,并且数据库基本上是 * 镜像的 *,因此如果您发送了一个具有特定解释的特定请求,则哪个服务器接收它并不重要。另一个服务器也应该理解,由于数据是镜像的,因此该请求是来自的。
也就是说,只需在数据库中进行特定的更新,并让服务器在数据库更新在另一个服务器中可见时立即重新加载。
除非您未使用负载平衡器或未正确使用负载平衡器...
在使用负载平衡器时,您可以使用虚拟IP或特定域名来“指向”负载平衡器,负载平衡器将重定向到可用的服务器。因此,如果您直接使用服务器的IP而不是负载平衡器的IP,则可以绕过负载平衡器。
whlutmcx2#
这是我要尝试的解决方案。它似乎对一个小的概念证明有效,我要在实际应用中尝试。
解决方法:
例如:http:///
1.对于HTTP请求,将“Host”头设置为您要访问的实际域名。在我的例子中,它是我在Tomcat中部署的第二个Web应用程序(test.myapp2.com)。
1.发送HTTP请求。
首先,当我在Firefox中尝试使用“Poster”插件时,它工作了,但在我的Java代码中它不工作。它也没有显示任何错误。它只是忽略了我设置的“Host”头。Java库限制覆盖一些请求头值,“Host”是其中之一。所以我不得不显式地设置它以接受受限制的头。
我的初始代码是:
新修复程序: