反向代理和请求 URL 感知 tomcat

反向代理和请求 URL 感知 tomcat

我配置了一个基础结构设置,其中 apache 反向代理终止 SSL 请求。然后,请求被代理到另一个前端 apache web 服务器,然后该服务器再次通过 mod_jk/AJP 连接到 tomcat。设置似乎运行顺利,没有一个例外。tomcat 提供 WSDL web 服务,在这些 XML 文件中,一个标签包含主机位置,该位置应与请求的 URL 相同。

由于当前设置,主机位置代表(ajp 连接的)前端 Web 服务器的内部 URL,而不是请求的外部 URL。解决此问题的第一次尝试是将外部 URL 设置为 tomcats server.xml 中的代理 URL,但此方法无法识别 HTTP 或 HTTPS 请求。我必须确定一个。

此外,目前还可以通过其他前端服务器使用完全不同的 URL 来访问这些服务(无需反向代理的更简单的设置)。

我希望我已经描述了我的问题,让大家可以理解。我怎样才能让 tomcat 知道所请求的 URL,或者我应该将所请求的 URL 传递给前端 apache?我现在有点不知所措。

提前致谢。

/编辑

请求序列的简要概述:

**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**

ProxyPreserveHost 开启不起作用,因为它将 host.external 传递给前端 apache,并且没有与该虚拟主机匹配的虚拟主机,从而导致 404 错误 - 不言自明。

配置一点也不特别。外部可访问的反向代理有 2 个虚拟主机 (HTTP|HTTPS)。两个虚拟主机都知道我们通过上下文 /customerX、/customerY 等为每位客户提供服务。例如 HTTP 虚拟主机:

<VirtualHost *:80>
ServerName host.external

ProxyPass /customerX http://customerX.internal
ProxyPassReverse /customerX http://customerX.internal

ProxyPass /customerY http://customerY.internal
ProxyPassReverse /customerY http://customerY.internal

...
</VirtualHost>

我知道,第二行是隐含的。

在第二个 apache 上,每个客户都有一个虚拟主机(仅 HTTP),具有相应的服务器名称和 tomcats webapps 必要的 JkMounts:

<VirtualHost *:80>
        ServerName customerX.internal

        JkMount ... 
</VirtualHost>

相关内容