首页 > 其他分享 >记录一次解决登录失败问题的方法与思路

记录一次解决登录失败问题的方法与思路

时间:2022-10-11 23:12:11浏览次数:49  
标签:06 登录 .. 记录 redis 问题 nginx 服务器 思路

记录解决登录失败问题的方法与思路


  • 背景
今天同组的小伙伴搭建了一套微服务测试环境. 9个服务器分为多个组
总入口有一个Nginx服务器. 
连接共同的redis,nacos,rabbitmq,以及数据库等中间件和数据库等.
下午服务启动之后遇到一个问题. 有部分功能打开总会出现session丢失
需要重新登录的情况.
很奇怪. 这里简单记录一下解决问题的过程. 原因很简单.
但是因为没想到的原因..导致浪费了很久. 

为自己开脱一点就是更主要的原因是检查我儿子三年级数学试卷, 竟然错了7道题. 
批评他到九点半..

问题现象

打开某一个拆分出去SU的功能总是前台提示,需要重新登录.
我这种前端菜鸡都不如的水准只会用F12进行简单查看.
发现错误提示都为:
strict-origin-when-cross-origin
心中大惊, 掉入本次耗时一小时解决问题的第一个坑里

第一种尝试

我极度怀疑是我自己的nginx配置文件模板存在严重Bug.
虽然这个比较烂的一直在完善的模板已经偷摸上过生产了.
我更加怀疑自己的模板存在严重的bug.
赶紧开始填坑.
加入nginx跨域的标准解决方案代码:

add_header 'Access-Control-Allow-Origin' 'http://10.110.139.79:5200';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

因为自己太过进展 在不同的server处都进行了亡羊补牢式的添加. 
已经丧失了nginx -s reload的信任
直接killall nginx 
./nginx -c What-The-Fuck.conf
的方式进行启动

然并卵

第二种尝试

查看所有服务器是否连接到了正确的redis看了几个配置.
因为同组的小伙伴没有修改 UseDNS 的sshd 配置 每次跳转巨费时间, 我实在是懒的一个一个的等着看(耐心不足)
这里给自己埋了第二个深坑. 

redis的配置都是没有问题的. 
这个时候想起来昨天写的blog. 发现redis服务器的时间竟然不对..

赶紧date -s 一下设置正确.(别问为什么这么用. 问就是我懒)
然并卵的时间第二次出现了. 
已经有问题.

第三种尝试

没招了 我把nginx的负载均衡的 upstream 干掉两台 从3个主节点 3个丛节点 改成1主1从
发现问题可以了..
立马先入了深深的疑惑.
然后我将三个主的全部上线
依旧没有问题....

我又将三个从的上线. 问题也消失了..
理性告诉我, 这TM是粘滞的效果 肯定有一台服务器有bug. 
但是因为我懒 我不想ssh到具体的没一台看问题...

我想了一个别的招
简单的在 nginx的主配置文件里面加了一个 DIY的log_format
具体为
log_format main $upstream_addr , $http_referer ;
access_log zhaobsh.txt main ;
然后再次重启.

找一个别的机器的进行登录发现问题在线
根据IP地址上去看一眼

时间不对. 里面的日志再报错:
2022-10-12 06:06:06,761 centos7 ERROR [N/A] [N/A] org.springframework.data.redis.listener.RedisMessageListenerContainer [cafCaching2-sub-2] Connection failure occurred. Restarting subscription task after 5000 ms
2022-10-12 06:06:11,763 centos7 ERROR [N/A] [N/A] org.springframework.data.redis.listener.RedisMessageListenerContainer [cafCaching2-sub-2] Connection failure occurred. Restarting subscription task after 5000 ms

还是该死的时间的问题

9台服务器加1台redis服务器的时间总有不一样的. 导致redis可能获取 主服务上面的 session 或者是cookie 有问题..
修改服务器时间正确后
放开所有的nginx upstream 节点 恢复正常.

同学.. 一定要看时间和时区.. 这次一小时和写文章的20分钟  水给小伙伴没有按照工作流程 确定时间是否一致上面来. 

建议一定修改 sshd的 UseDNS关闭 , 然后必须时间保持一致.. 能够解决很多不必要的问题. 

over 水一编 希望以后不要总是怀疑自己 先去怀疑一下混乱的IaaS层. 

顺便鄙视一下CSDN, 复制一个 upstream_addr 还必须得登录,想钱想疯了.我密码还是你给丢的呢. 

标签:06,登录,..,记录,redis,问题,nginx,服务器,思路
From: https://www.cnblogs.com/jinanxiaolaohu/p/16782959.html

相关文章