代理升级的HTTP1.1(https://IP1:443 到http://IP2:8080)使用Apache2

代理升级的HTTP1.1(https://IP1:443 到http://IP2:8080)使用Apache2,apache,jboss,proxy,http-headers,http-1.1,Apache,Jboss,Proxy,Http Headers,Http 1.1,我正在尝试使用Apache 2创建一个SSL代理,该代理侦听端口443并根据上下文转发不同IP/端口上的请求: 情景: 发出jBoss https远程处理请求,该请求使用在Wildfly 8.2中升级为jBoss远程处理的HTTP1.1,来自: https://xxxxxxx.com:443 并转发至: http://192.168.x.y:8080 我发现以下重写条件有效: RewriteCond %{HTTP:Upgrade} jboss-remoting [NC] RewriteRul

我正在尝试使用Apache 2创建一个SSL代理,该代理侦听端口443并根据上下文转发不同IP/端口上的请求:

情景:

发出jBoss https远程处理请求,该请求使用在Wildfly 8.2中升级为jBoss远程处理的HTTP1.1,来自:

https://xxxxxxx.com:443
并转发至:

http://192.168.x.y:8080
我发现以下重写条件有效:

RewriteCond %{HTTP:Upgrade} jboss-remoting [NC]
RewriteRule ^/(.*)$ http://192.168.x.y:8080/$1 [P]
但我不知道应该应用什么重写规则才能让请求进行http远程处理,而不是http远程处理

Apache输入:

GET / HTTP/1.1\r\n
Sec-JbossRemoting-Key: WJaD+AcnutfrXiBna+KL5w==\r\n
Upgrade: jboss-remoting\r\n
Host: xxxxxxx.com\r\n
Connection: upgrade\r\n
Apache输出:

GET / HTTP/1.1\r\n
Host: xxxxxxx.com\r\n
Sec-JbossRemoting-Key: WJaD+AcnutfrXiBna+KL5w==\r\n
X-Forwarded-For: 192.168.x.y\r\n
X-Forwarded-Host: xxxxxxx.com\r\n
X-Forwarded-Server: xxxxxxx.com\r\n
Connection: Keep-Alive\r\n
如您所见,升级和连接头被剥离。
有什么办法可以让我把一切都转发出去吗?

找到了解决办法。它包括从Apache2.4+攻击mod_proxy_wstunnel,以支持jboss远程升级

作为quick hack,您需要编辑以下文件:

mod_proxy_wstunnel.c
强制性变更:

升级标头需要从以下位置修补:

buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);

以及以下一行:

 if (!upgrade || strcasecmp(upgrade, "WebSocket") != 0)

现在,一个简单的重写规则就可以做到:

RewriteRule ^/(.*)$ ws://IP2:8080 [P]
注意ws协议。它需要它来触发升级

代码是这样工作的,但是您也应该修补protocol/mod_proxy_wstunnel文件,并使所有内容更通用

if (!upgrade || strcasecmp(upgrade, "jboss-remoting") != 0)
RewriteRule ^/(.*)$ ws://IP2:8080 [P]