tomcat 为不同的Web应用程序绕过特定服务器的负载平衡器

2cmtqfgy  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(102)

我有2个Web服务器在负载平衡环境和两个Web服务器有2个Web应用程序部署在他们的tomcat服务器。两个不同的域名被用来访问这两个Web应用程序。
我遇到了一个情况,我必须在两个Web服务器上分别为两个Web应用程序重新加载一些东西。所以我必须向每个Web服务器和每个Web应用程序发送http请求来重新加载(基本上我想绕过负载平衡器)。
有没有办法添加一个HTTP头,这样我就可以在运行时向特定的Web服务器发送请求,以指定域名?或者有没有其他方法可以实现这一点?
注意:这个HTTP请求可以从部署在任何一个Web服务器上的java代码发出,所以基本上我们可以假设它是局域网内Web服务器之间的通信。

2admgd59

2admgd591#

我觉得这个问题很奇怪。
如果您有一个负载平衡器,这意味着您在两个后端服务器之间分配负载,即部署相同应用程序的服务器和必须一致的服务器,这意味着两个部分必须具有完全相同的数据库(因为同一客户端可以在一个连接中从一个服务器服务,也可以在下一个请求中从另一个服务器服务,这取决于负载平衡器的配置)。
因此,在这种情况下,由于两个部分 * 应该 * 保持同步,并且数据库基本上是 * 镜像的 *,因此如果您发送了一个具有特定解释的特定请求,则哪个服务器接收它并不重要。另一个服务器也应该理解,由于数据是镜像的,因此该请求是来自的。
也就是说,只需在数据库中进行特定的更新,并让服务器在数据库更新在另一个服务器中可见时立即重新加载。
除非您未使用负载平衡器或未正确使用负载平衡器...
在使用负载平衡器时,您可以使用虚拟IP或特定域名来“指向”负载平衡器,负载平衡器将重定向到可用的服务器。因此,如果您直接使用服务器的IP而不是负载平衡器的IP,则可以绕过负载平衡器。

whlutmcx

whlutmcx2#

这是我要尝试的解决方案。它似乎对一个小的概念证明有效,我要在实际应用中尝试。
解决方法:

  1. URL应该是Web服务器的IP地址或服务器主机名。
    例如:http:///
    1.对于HTTP请求,将“Host”头设置为您要访问的实际域名。在我的例子中,它是我在Tomcat中部署的第二个Web应用程序(test.myapp2.com)。
    1.发送HTTP请求。
    首先,当我在Firefox中尝试使用“Poster”插件时,它工作了,但在我的Java代码中它不工作。它也没有显示任何错误。它只是忽略了我设置的“Host”头。Java库限制覆盖一些请求头值,“Host”是其中之一。所以我不得不显式地设置它以接受受限制的头。
    我的初始代码是:
URL url = new URL("http://<IP-ADDRESS>/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Host", "test.myapp2.com");
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));

新修复程序:

String allowRestrictedHeader = System.getProperty("sun.net.http.allowRestrictedHeaders");
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
try {
    URL url = new URL("http://<IP-ADDRESS>/");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestProperty("Host", "test.myapp2.com");
    // use connection
    .
    .
    .
}
finally {
    if (allowRestrictedHeader == null) {
        System.clearProperty("sun.net.http.allowRestrictedHeaders");
    } else {
        System.setProperty("sun.net.http.allowRestrictedHeaders",
                allowRestrictedHeader);
    }
}

相关问题