JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

解决nginx多负载下+tomcat部署项目会话路径改变导致的401问题

wys521 2024-09-07 02:56:25 精选教程 23 ℃ 0 评论

一、问题描述:app的请求登录接口成功后,再次访问其他接口报错401


二、部署逻辑图:



三、排查过程:

1、使用nginx,模拟第三方代理:



2、我方nginx,监听8084端口, 直接用根目录接收:



3、postman模拟请求登录接口:

http://127.0.0.1:8085/firstproxy/apptest/api/login?username=aaa&password=abc

正常返回:


访问业务接口:



问题重现:正常登录后,访问业务接口报错401??!!


开始以为是nginx没有带上cookie,导致会话丢失,故在nginx日志增加$http_cookid



查看日志情况,cookie是有的:



再次比较两次服务端返回的cookie发现,会话路径不是/,而是/apptest/, 表明登录成功的会话路径是/apptest/,而再次请求的会话路径是 /,所以服务端认为你没有登录,报错401了。



四、解决:

第一种方法:

修改tomcat会话路径:在\conf\context.xml增加如下配置:默认用项目名称做会话路径,修改为/。



再次测试,可以正常返回:



此次登录接口的会话路径为/



第二种方法:

采用jar包方式部署,这种原理和第一种一样,亲测可以。


第三种方法:


修改nginx配置,增加如下行,可以将/apptest的cookie输出到/上



重启nginx



再次测试可以



再次查看登录接口返回的cookie,会话路径变为/,问题解决。


以上就是对登录后出现401问题的总结,不知道对你们有帮助没?


码字不易,记得点赞加关注哦!!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表