Tomcat 在 F5 负载均衡器后面重定向

Tomcat 在 F5 负载均衡器后面重定向

我有 2 台服务器,每台运行 2 个 Tomcat 实例(一个 Tomcat 实例用于 RC,一个用于生产)。这些服务器(我们称之为 server1 和 server2)设置在 F5 负载平衡器后面,以保持正常运行时间并提供 SSL 支持。当有人访问 server1:8081 时,他们会看到 server1 上第二个 tomcat 实例的欢迎屏幕(而 server1:8080 将提供第一个实例)。当连接到 server:8443(F5 负载平衡 URL 指向 server1:8081 和 server2:8081)时,我还会看到该实例在端口 8081 上监听的 Tomcat 欢迎屏幕。但是,当访问 server:8443/app/ 时,我收到错误,wireshark 数据包捕获显示重定向到 server1 端口 8080。我不知道重定向到端口 8080 是从哪里来的,而且我的 server.xml 中没有该 tomcat 实例基本配置的任何重定向。有人知道在 .war 文件编译期间,实际应用程序是否可能已经引入了端口重定向吗?

答案1

是的,如果输入的 URL 不是 100% 符合预期,Web 应用程序通常会重定向。新手开发人员往往会天真地进行重定向,即他们让应用程序响应HTTP 302 http://my-host:8080/proper/link/index.jsp他们使用硬编码文本的地方8080(也是,http但这个问题在重定向中不太常见)。

换句话说,他们使用的重定向在笔记本电脑上工作正常,但当 Tomcat 使用其他端口时,重定向就会失败。F5 和其他前端(也称为“反向代理”)一样,会拦截 HTTP 重定向,如果应用程序使用,http://server1:8081/xxx您的浏览器会收到https://server:8443/xxx。但它会与 8080 混淆,并保持原样。

我通常的反应是向应用程序开发人员提交一个错误:请求使用自动确定的端口号进行重定向(如果 tomcat 将来某天在 8085 上监听,则重定向应该是 8085)。

答案2

我最终从应用程序开发人员那里获得了一些关于在负载均衡器后面设置应用程序的文档。我必须将 proxyName 和 proxyPort 属性添加到 server.xml 文件的连接器部分。

答案3

您可以尝试添加远程IpValve到您的 webapp 的 META-INF/context.xml,它会将 request.serverPort 填充为 F5 端口,甚至将 request.remoteAddr 填充为客户端的真实 IP,而不是代理的 IP。然后您可以照常生成任何链接,所有链接都将包含前端反向代理的主机名和端口。

相关内容