如何强制Spring Boot重定向到https而不是http?

时间:2015-03-15 22:56:46

标签: spring configuration spring-security spring-boot

我使用Spring Boot + Spring Security。我们对nginx请求我们的应用程序的生产使用proxy_pass。问题是应用重定向到http而不是https(当用户注销时)。

如何强制Spring在生产环境中重定向到https并仍然在dev env上重定向到http

2 个答案:

答案 0 :(得分:4)

我认为最好的解决方案是打开

server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto

在嵌入式tomcat中,让spring写出正确的重定向标题。

请确保在nginx.conf中包含配置,如:

proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Host $server_name;
proxy_set_header   X-Forwarded-Proto $scheme;

但请确保您的nginx位于server.tomcat.internal_proxies的地址范围内,否则您必须更改范围(例如,在使用docker-machine和container链接时,这是必要的)。

答案 1 :(得分:1)

问题是nginx最通过HTTP与您的应用程序通信,并且应用程序(正确地)认为该请求来自HTTP URL,因此在计算重定向URL时,它也将以HTTP结束。有多种方法可以解决这个问题...

快速谷歌搜索似乎表明有一个针对nginx的AJP模块。也许你可以使用它而不是HTTP代理?这可能会解决它,因为nginx和应用程序之间没有HTTP流量(因此没有HTTPS-> HTTP切换)。

另一种方法是在nginx和make Spring Boot aware of it中设置X-Forwarded-Proto标头。

相关问题