Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为组合HTTP/HTTPS反向代理配置JBoss EAP(6.4.x)?_Jboss_Reverse Proxy_Jboss Eap 6 - Fatal编程技术网

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

如何为组合HTTP/HTTPS反向代理配置JBoss EAP(6.4.x)?,jboss,reverse-proxy,jboss-eap-6,Jboss,Reverse Proxy,Jboss Eap 6,我们的应用程序运行在JBoss EAP 6.4中。我们的开发设置在端口8080上提供了以HTTP模式运行的JBoss实例,并提供了一个包含HTTP(端口9090)和HTTPS(端口9443)端点的反向代理,以帮助测试不同的场景 当我试图通过将UriInfo注入请求处理程序来使用“当前”URL时,出现了一个问题。URI中的scheme部分始终依赖于standalone.xml中连接器设置的scheme属性,而不是实际使用的scheme。例如,如果我调用https://localhost:9443和

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

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


有没有一种方法可以使JBoss的行为更像大多数其他应用程序服务器,也就是说,不必对所使用的环境,特别是反向代理和负载平衡器做任何假设

RemoteIpValve应该可以满足您的所有需求

JBossWeb 7.5.20(EAP 6.4.20)的源代码:

以下是上游Apache Tomcat 7.0项目网站上更可读的文档:

在您的情况下,最低配置为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),例如


如果需要,您可以使用该阀门进行更多操作,只需查看文档了解更多详细信息

这里还简要介绍了示例(需要RH登录):


顺便说一句,如果你能够使用AJP协议(从代理到app.server),这将不需要,因为AJP是为这些情况设计的,所有必需的信息都应该传输到应用程序。服务器非常透明。

我将答案标记为正确,因为
RemoteIpValve
是正确的方法,但我不得不采取更困难的方法:EAP 6.4中包含的
RemoteIpValve
非常旧,不支持
X-Forwarded-Port
(因此将任何HTTP/HTTPS端口重置为80/443)。我必须从当前的Tomcat中提取一个
RemoteIpValve
,将其放入单独的JAR中,并将其作为一个模块包含在EAP安装中。但除此之外,
RemoteIpValve
是一个不错的选择。是的,它是一个相当古老的代码,主要基于Tomcat7.0。前一段时间,当我用这个做实验时,我不得不用SSLValve做一些类似的事情。EAP 7不使用Tomcat代码,因此没有此类阀门),所有这些都可以通过底拖子系统上的表达式过滤器完成,该子系统非常灵活。
<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>