问题发现
业务代码逻辑大致如下
公司java服务中有一个服务需要取X-Forwarded-For这个值作为IP地址通过哈希算法得到token校验登陆状态
域名直接解析到阿里云ACKpro部署的nginx-ingress-controller弹性IP可以正常取到用户真实IP
但是域名解析到CDN上之后nginx-ingress-controller传递过去的X-Forwarded-For这个值变成了CDN服务所在阿里云自身的公网IP,而这个IP在阿里云内部又是会负载均衡的不断变化,所以导致内部java服务获取到的IP地址和token校验失效,这样一来导致授权手机号码一键登录APP报出token失效的错误
解决方案:
参考:https://blog.csdn.net/baidu_38432732/article/details/131214545
编辑nginx-ingress-controller的configmap
kubectl -n kube-system edit cm nginx-configuration
在配置中添加以下内容
compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true"
修改后如下
一般来说保存后会立即生效,Ingress会将真实的客户端IP添加到X-Forwarded-For字段中
如果发现有问题可以尝试重启nginx-ingress-controller