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

时间:2018-06-12 17:49:24

标签: jboss reverse-proxy jboss-eap-6

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

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

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

1 个答案:

答案 0 :(得分:0)

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,它还会将secure标志设置为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

BTW如果您能够使用AJP协议(从代理服务器到应用程序服务器),则不需要这样做,因为AJP是针对这些情况而设计的,并且所有必需的信息都应该转移到应用程序。服务器非常透明。