代码之家  ›  专栏  ›  技术社区  ›  Nikolai Prokoschenko

如何为组合的http/https反向代理配置jboss eap(6.4.x)?

  •  1
  • Nikolai Prokoschenko  · 技术社区  · 8 年前

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

    当我试图通过注入 UriInfo 我的请求处理程序。内部uri的scheme部分始终依赖于 standalone.xml 而不是实际使用的方案。例如,如果我打电话 https://localhost:9443 和 http://localhost:9090 当连接器的方案设置为 https ,两个url都转换为https,即。 https://localhost:9443 而且 https://localhost:9090 . 如果我将连接器方案切换到 http ,两个url都将更改为http。不用说, X-Forwarded-Proto 也被忽略。

    有没有办法使jboss的行为更像其他大多数应用服务器,也就是说,不必对使用的环境,特别是反向代理和负载平衡器做任何假设?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Petr H    8 年前

    遥控阀 应该做你需要的一切。

    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

    以下是上游ApacheTomcat7.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,port设置为443。 因为您似乎需要将https端口设置为9443,所以可以通过附加的 HttpServer端口 参数(我认为您还需要将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是为这些情况设计的,所有需要的信息都应该传输到应用程序中。服务器非常透明。