项目背景
项目接入了统一认证登录,同时注册了回调地址https://localhost/test(这里用了假的路径,只用作描述问题)。中间省去了nginx反向代理,整个登录流程:
(1)点击登录,跳转到统一认证登录页面https
(2)输入手机号及验证码,完成登录
(3)统一认证平台回调地址(https://localhost/test?token=xx),服务后台根据token完成用户登录,之后会在后台重定向到 /index 首页。
问题描述
统一认证登录回调后台的https登录(nginx反向代理http服务)接口(https://localhost/test),登录成功后,返回的url为http://localhost:443/index
初步定位
可以看到返回的端口正确,说明肯定是经过nginx,且是https协议过去的,可以从示例的截图中确认:
Nginx日志
浏览器结果
原因分析
在统一认证回调后,调用https回调接口,经过nginx进入http后台服务,后台完成用户登录后,有个请求重定向到/index,导致返回的协议类型为后台协议(http),至于为什么还是带上了nginx端口(443),还没弄明白
解决方式
增加nginx上的配置,对后台的重定向请求http强制转换成https,配置项为:
...
# 这个配置解决重定向后https变成了http 的问题。
proxy_redirect http:// https://;
...
再次测试,后的结果,可以看到把http后台的重定向转成了https
后台http重定向转成https