通过负载均衡访问服务端导致https重定向到http
网友遇到的问题:https://www.cnblogs.com/niuxiaozu/p/16468509.html
总结:他的解决办法是给springboot的yml增加server.tomcat.useRelativeRedirects为true
让程序返回/,这样外层nginx不管是返回绝对还是相对路径都不会有问题。
tomcat的org.apache.catalina.connector.Response的sendRedirect方法逻辑:
参见:https://www.cnblogs.com/niuxiaozu/p/16468509.html
如果协议为空或为http1.0则返回绝对路径
如果server.tomcat.useRelativeRedirects为false(tomcat默认就是false)则返回绝对路径
否则返回相对路径
总结:正常协议为http1.1并且设置server.tomcat.useRelativeRedirects为true则返回
相对路径,负责返回绝对路径
注:
1、curl使用http1.0的写法为curl --http1.0 http://a/login -v
http1.1写法为curl --http1.1 http://a/login -v
2、springboot的tomcat的redirect使用相对路径(默认使用绝对路径),
需要在yml里定义server.tomcat.use-relative-redirects=true
如果是传统tomcat配置参见
https://blog.csdn.net/xing930408/article/details/111225064
https://tomcat.apache.org/tomcat-11.0-doc/config/systemprops.html
即定义环境变量-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
Response的toAbsolute(String location)返回绝对路径方法逻辑:
如果入参是//开头(比如//xxx)则拼接类型http:拼接location,比如http://xxx
如果入参是/开头或不含schema(比如/login或login)则
拼接http(https)