2

我们在一个负载均衡器后面运行 Tomcat 7,该负载均衡器也可以作为 SSL 终结器,以及一个 Apache HTTP Server 2.4。Apache 通过mod_proxy_ajp连接到 Tomcat 。

对于应用程序,重要的是 Tomcat 知道请求是通过 HTTPS 进入的,因此是安全的。正如本文所建议的那样,通常在 Tomcat 的连接器上使用属性secure="true"和可能的scheme="https" proxyPort="443"​​ . 虽然这可行,但由于我们也将 HTTP 用于某些目的,因此很不方便,因此我们需要为此目的设置两个 Tomcat 连接器。而且它有一种味道,因为这种方式基本上是告诉 Tomcat 覆盖它从 Apache HTTP 服务器获得的错误信息,即请求是 HTTPS 而不是 HTTP,而不是告诉 Apache 它应该发送有关协议和的正确信息安全状态。

所以我的问题是:是否有可能以某种方式配置 Apache HTTP 服务器本身,使其通过 AJP 协议传递正确的信息:请求是通过 HTTPS 接收的并且是安全的?问题是它不知道它是 HTTPS,因为它之前有一个 SSL 终止符,并且就它而言,请求是通过 HTTP 到达的。我可以以某种方式告诉 Apache 它实际上是 HTTPS 吗?

4

2 回答 2

1

部分解决方案似乎是在 Apache HTTP 服务器的虚拟主机中的ServerName 指令上设置协议:

ServerName https://whatever

这样,重定向中的任何 Location: 标头似乎都被重写为 Apache 中的 https,但 Tomcat 仍然通过 AJP 传递了错误的信息。

于 2016-01-07T08:44:31.313 回答
0

我一直认为 AJP 会自动传输这些信息 - 但我没有使用 mod_proxy_ajp,而是使用 mod_jk。这是我更喜欢 AJP 而不是 HTTP(和代理)的原因之一。

可能值得更改模块/连接

于 2016-01-06T20:33:53.990 回答