1

我们在 Tomcat 服务器(集群)上托管了一个 Web 应用程序,两个 Apache Web 服务器位于前面,F5 负载平衡位于 Apache 前面。SSL 在 F5 负载平衡器中配置。现在,每当有人使用负载均衡器的安全 URL 访问我们的应用程序时,我们的 Java Web 应用程序都不会评估 request.isSecure 是否为真。我需要做任何设置来启用它吗?

在我们的 apache Web 服务器中,我们使用代理平衡器进行以下配置

ServerName ip:80

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster>
          BalancerMember ajp://ipapp1:8009 route=jvm1 loadfactor=1
          BalancerMember ajp://ipapp2:8009 route=jvm2 loadfactor=1 status=+H
          ProxySet lbmethod=byrequests
</Proxy>

我试图通过为 8080 添加scheme=“https”、secure="true" 和 proxyPort="443"来更改 tomcat 的 server.xml 中的连接器详细信息,但它不起作用。

我在这里想念什么?

4

2 回答 2

1

您需要检查您的应用程序以查看它是否受支持,但通常会转发标头以传达请求协议。传统上这是 X-Forwarded-Proto 标头,但 X-... 命名法已被弃用。Forwarded 标头现在在一个标头中支持 X-Forwarded-For、X-Forwarded-Proto 等。但是,仍然广泛支持已弃用的方法,因此任何一种方法都应该在等待应用程序支持时工作。

X-Forwarded-Proto: https

或者

Forwarded: proto=https

RFC 7239中描述了新标准

于 2015-11-10T21:55:56.607 回答
0

也许我在这里有点晚了,但我有同样的情况。我添加了

方案=“https”,安全=“真”和代理端口=“443”

端口 8009上,而不是在端口 8080 上,就像原来的问题一样。这是因为来自 Apache 的请求是通过端口 8009 上的 AJP 发出的。此外,Apache 必须从http.conf启用http-ssl.conf并且它必须侦听端口 443。

我尝试了这个配置并且它有效,通过 Apache 前面的负载均衡器发送的请求正确地报告了 https 中的 tomcat webapp。

我希望这对有同样问题的人有所帮助,我花了几天时间才明​​白这一点。

于 2021-05-26T13:52:13.297 回答