我们正面临一个问题,我们并不知道它来自哪里。
我们的应用程序使用Spring Cloud
,Spring Oauth2
和Spring 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>
答案 0 :(得分:1)
我终于找到了这个问题。基本上是Apache
conf:
ProxyPreserveHost on
正在更改标头Location
,因为在我们系统内重定向的所有请求都会丢失Https
协议。发回的所有重定向都在此之后使用Http
。
继续使用此配置的解决方案是使用以下方法手动覆盖Http
conf中的Apache
:
Header edit Location ^http://(.*)$ https://$1