问题背景
在公司内迁移项目布署平台后,域名解析也做了相应的迁移,迁移后原有的页面通过https访问时,cas登录不进去了。
问题排查
加了断点log查问题,总算查到因为去cas登录时的所附带的url参数(登录成功回跳的页面A)是https协议的,在登录完成回到页面A(cas已在url附加了包装好的token)的时候,还需要拿到页面A的url(这时取到的是ctx.request.protocol是http)和tiket去调用cas的validate接口做校验,校验得到的结果不成功,因为token包装的url是加了https的,两个url协议不同,导致登录失败。
从域名代理分析,域名加了一层转发规则,而转发请求是通过nginx实现的。一般不做特殊配置的情况下,nginx会把https的协议转发成http,到接口那里取ctx.request.protocol就变成了http了。
问题解决
在nginx的配置中添加如下代码:
proxy_set_header X-Forwarded-Proto $scheme;