我们的环境如下所示:
HLB(Ace) – >冗余Apache服务器 – >后端Websphere服务器
进入负载均衡器的安全stream量,其中SSL证书被解密。 该请求然后转发到两个Apache Web服务器之一。 然后Apache将请求转发到适当的Websphere Application Server(如果需要)。 Websphere通过相同的path回复客户端。
我们的networking组告诉我们SSL不应该安装在networking服务器上,因为它阻止了它们的数据包跟踪。
对于我们内部的书面应用程序,当URL被redirect时,我们相对redirect,因此它保持为HTTPS。 然而,我们有一个购买的产品,处理,然后发送绝对redirect回到客户端作为HTTP。 我们相信这是因为apache收到未encryption的请求。
我们正试图find一种方法来让Apache将协议重写为https的应用程序在Websphere中(应用程序是Vignette Portal)
我试过一个简单的
<Location /LocationINeed> RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </Location>
但是这并没有奏效。 根据我读的这个绝对的强制直接redirect到客户端,并最终创build一个循环。
我是一个相当缺乏经验的Apachepipe理员,花了一天的时间在网上寻找MOD_substitutem和mod_rewrite,但是我所有的尝试都不尽如人意。
如果你遇到过这个问题,我很想听听你是如何解决这个问题的。
如果您的应用程序所使用的页面中存在一些使用http://指向自身的绝对链接,则必须修复该应用程序。
如果只是Location标题,你可以尝试类似这样的方法:使用mod_headers并沿着这些行使用规则:
Header edit Location ^http://www.example.com/hudson/ https://www.example.com/hudson/
编辑:
关于为什么会发生这种情况的一些背景知识:为什么这是HTTP Location标题的问题,而不是在页面内的相对链接,原因是Location标题始终需要一个绝对的URI,根据规范 :
[…]字段值由一个绝对URI组成。
Location = "Location" ":" absoluteURI
(老实说,我认为一些浏览器可能会理解一个相对的URI,并将其解释为与他们发送的初始请求有关,但是这不符合规范,有些工具/浏览器会不喜欢它)。