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

一、问题描述: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问题的总结,不知道对你们有帮助没?


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

相关文章

nginx location配置

nginx location配置location 指令语法location [modifier] [URI] {# 配置块}modifier:匹配修饰符,决定了匹配的类型和优先级。URI:要匹配的请求...

网页服务-Nginx - 修改默认网站存储路径

基本环境底层: Windows 11 x64 虚拟化层:VMWare Workstation 17.0.2 虚拟化兼容性:ESXi 6.7 虚拟硬件: CPU: 4 Core RAM:...

Nginx的路径匹配规则

=,精确匹配^~,匹配以xx开头~,正则匹配,区分大小写~*,正则匹配,不区分大小写!~,正则不匹配,区分大小写!~*,正则不匹配,不区分大小写/ 通配,所有没有匹配的,按当前规则处理 优先级: =...

nginx如何配置跨域

要在 Nginx 中配置跨域,可以使用 add_header 指令来添加 Access-Control-Allow-* 头信息,如下所示:location /api { if ($reques...

在nginx配置文件中设置nginx缓存

可以按照以下步骤进行操作:1.打开nginx配置文件,一般在/etc/nginx/nginx.conf中2.在http段中添加以下内容:http { # 设置nginx缓存路径和缓存大小...

常规服务器环境怎么搭建及项目部署

一、引言在服务器环境搭建和项目部署过程中,需要进行一系列的配置和操作,以确保服务器的正常运行和项目的顺利部署。本文将详细介绍常规服务器环境搭建及项目部署的步骤。如果你没有服务器,没有技术,想要配置这个...