重定向已从Https降级为Http

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重定向已从Https降级为Http相关的知识,希望对你有一定的参考价值。

我们正面临一个问题,我们并不知道它来自哪里。

我们的应用程序使用Spring CloudSpring Oauth2Spring Boot 1.5.9。入口点是使用Zuul将调用重定向到其他微服务的API网关服务。有一个Authorization-server来处理Oauth2授权,不能从外面访问,但通过API-Gateway

它被配置为对来自客户端的每个调用使用Https,然后我们在系统内部使用Http在微服务之间进行通信。它位于Apache proxy后面,配置了使用Https并禁用端口80的证书。

我们目前遇到的问题是来自Spring Security过滤器的每个重定向都会在浏览器中从Https降级到Http,然后由于端口80被禁用而无法找到应用程序而失败。

该应用曾经工作但现在却没有。我们使用docker,因此我们尝试重新部署以前的图像,但它们也不起作用。 Apache conf也没有改变。

我们并不完全知道哪个部分失败了,如果它是Apache proxy或Spring配置,特别是当我们能想到的一切都已经恢复到以前的工作问题时。

通过此设置,可以强制重定向更改的内容是什么以及我们如何验证它? Spring Security配置可以影响这个还是更可能来自Apache proxy

这是我们目前的Apache config

<VirtualHost *:443>
  SSLEngine on
  SSLCertificateFile /etc/apache2/vpp-api/ssl/server-cert.pem
  SSLCertificateKeyFile /etc/apache2/vpp-api/ssl/server-key.pem

  SSLVerifyDepth 10
  SSLCACertificateFile /etc/apache2/vpp-api/ssl/cacert.pem

  <location />
    ProxyPreserveHost on
    ProxyPass http://localhost:8080/
    ProxyPassReverse http://localhost:8080/
  </location>

</VirtualHost>
答案

我终于找到了这个问题。基本上这是Apache conf中的这一行:

ProxyPreserveHost on

它正在改变标题Location,因为在我们系统内重定向的所有请求都会丢失Https协议。发回的所有重定向都是在此之后使用Http

继续使用此配置的解决方案是使用以下方法手动覆盖Http conf中的Apache

Header edit Location ^http://(.*)$ https://$1

以上是关于重定向已从Https降级为Http的主要内容,如果未能解决你的问题,请参考以下文章

应用易受 Intent 重定向问题的影响

HTTP 到 HTTPS 301 重定向代码不起作用,它说重定向太多

使用片段 (#) 重定向链接 - asp.net

301重定向没有片段[重复]

Springboot以Tomcat为容器实现http重定向到https的两种方式

Springboot以Tomcat为容器实现http重定向到https的两种方式