负载均衡器 (http/https) 后面的 Apache (http) - 重定向不保留 https

负载均衡器 (http/https) 后面的 Apache (http) - 重定向不保留 https

我有两种配置 - 开发和暂存 - 具有(据称)相同的配置:一组仅 HTTP 的 Apache 实例位于 Citrix 负载均衡器后面,允许 HTTP 和 HTTPS 连接。

Apache VirtualHost 定义包含以下指令:

RedirectMatch permanent /something/endpoint(.*)$ /something/otherendpoint$1
SSLProxyEngine On
ProxyPass /something/endpoint !
ProxyPass /something https://192.168.1.100:6443/something
<Location /something>
ProxyPassReverse https://192.168.1.100:6443/something
</Location>

因此,我想要将 的所有请求代理/something到不同的后端 HTTPS 服务器,但 除外/something/endpoint,我需要重定向。

现在,我的开发环境中一切正常。我可以访问http://hostname/something/endpoint,它会将我重定向到http://hostname/something/otherendpoint。同样,我可以访问https://hostname/something/endpoint,它会将我重定向到https://hostname/something/otherendpoint

但在暂存环境中,http://hostname/something/endpointhttps://hostname/something/endpoint重定向到http://hostname/something/otherendpoint- 它不保留 HTTPS。

我一直在绞尽脑汁想找出这两种配置之间的区别。肯定是某些原因导致 Apache 不遵守访问协议,但我无法找出原因。HTTP 响应标头在两种环境中看起来相同,除了Location指定http而不是的重定向标头https

对于哪些配置差异可能导致这种情况,您有什么想法吗?

答案1

请记住,永久重定向会被您的网络浏览器缓存,您需要在每次测试/修改配置后手动清除浏览器缓存,或者在“隐身”/“匿名”浏览器窗口中进行测试。

如何apache httpd 合并配置指令可能有点棘手。您使用的语法似乎有点不一致,这可能是导致问题的原因:

ProxyPass /something https://192.168.1.100:6443/something
<Location /something>
ProxyPassReverse https://192.168.1.100:6443/something
</Location> 

为了清楚起见,请使用:

ProxyPass /something/endpoint !
ProxyPass /something https://192.168.1.100:6443/something
ProxyPassReverse /something https://192.168.1.100:6443/something

或者将所有内容包含在 Location指令中:

<Location /something>
  ProxyPass  https://192.168.1.100:6443/something
  ProxyPassReverse https://192.168.1.100:6443/something
</Location>
<Location /something/endpoint>
  ProxyPass  "!"
  Redirect permanent /something/otherendpoint
</Location>

相关内容