如何为 HTTP/HTTPS 反向代理组合配置 JBoss EAP (6.4.x)?



我们的应用程序在 JBoss EAP 6.4 中运行。我们的开发设置提供了在端口 8080 上以 HTTP 模式运行的 JBoss 实例,以及具有 HTTP(端口 9090(和 HTTPS(端口 9443(端点的反向代理,以帮助测试不同的场景。

当我尝试通过将UriInfo注入我的请求处理程序来使用"当前"URL 时,会出现问题。内部 URI 的方案部分始终依赖于standalone.xml中连接器设置的方案属性,而不是实际使用的方案。因此,例如,如果我调用https://localhost:9443并在连接器的方案设置为https时调用http://localhost:9090,则两个 URL 都转换为 HTTPS,即https://localhost:9443但也https://localhost:9090.如果我将连接器的方案切换到http,两个 URL 都会更改为 HTTP。不用说,X-Forwarded-Proto也被忽略了。

有没有办法让 JBoss 的行为更像大多数其他应用程序服务器,即不对使用的环境,尤其是反向代理和负载均衡器做出任何假设?

RemoteIpValve应该可以做你需要的一切。

来自 JBossWeb 7.5.20 (EAP 6.4.20( 的源代码: http://anonsvn.jboss.org/repos/jbossweb/tags/JBOSSWEB_7_5_20_FINAL/src/main/java/org/apache/catalina/valves/RemoteIpValve.java

以下是上游 Apache Tomcat 7.0 项目网站上更具可读性的文档: https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

在您的情况下,最低配置是 Web 子系统中的以下全局阀门配置:

<valve name="remoteip-valve" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteIpValve">
<param param-name="protocolHeader" param-value="X-Forwarded-Proto"/>
</valve>

这将根据 X-Forwarded-Proto 标头的值设置方案。 对于 https,它还会将安全标志设置为 true,并将端口设置为 443。 由于您似乎要求将HTTPS端口设置为9443,因此您可以通过其他httpsServerPort参数来完成(我认为您还需要将httpServerPort设置为9090,因为RemoteIpValve会将其覆盖为80否则(,例如

<valve name="remoteip-valve" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteIpValve">
<param param-name="protocolHeader" param-value="X-Forwarded-Proto"/>
<param param-name="httpServerPort" param-value="9090"/>
<param param-name="httpsServerPort" param-value="9443"/>
</valve>

如果需要,您可以使用该阀门执行更多操作,只需查看文档以获取更多详细信息。

例如,这里也简要描述了它(需要RH登录(:https://access.redhat.com/solutions/629863

顺便说一句,如果您能够使用 AJP 协议(从代理到应用程序服务器(,则不需要这样做,因为 AJP 是为这些情况设计的,并且所有必需的信息都应该几乎透明地传输到应用程序服务器。

最新更新