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