本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题)

2023-05-16

最近做一个课程项目,在本地开发完后部署到服务器上,一切都比较顺利。
但是在登录用户的时候却一直显示验证码错误!!!

排错过程

    • 1. 代码检查
    • 2. 参数检查
    • 3. 外层检查
    • 4. 直接访问
    • 5. 通过Nginx配置解决问题

1. 代码检查

首先,我是在本地上先测试了一遍,发现没有问题。

2. 参数检查

本地代码没有问题。于是我就在生成验证码的地方,输出打印了一下生成的验证码,然后在检验验证码的地方也输出了一下输入的验证码和生成的图片验证码,本地上测试无误,重新部署到服务器。部署完毕后,cd到tomcat根目录的logs目录下,输入`tail -f catalina.out`按回车,查看tomcat的控制台输出,然后再试一下输入验证码后得到的是什么。结果发现在检验验证码的地方,本应输出生成的验证码的,输出的却是null。于是初步怀疑是session被清空了。

3. 外层检查

既然是session丢失,就有可能是代码之外的问题。在我的服务器环境下,代码之外主要有两个因素。首先我的服务器的采用了Nginx+Tomcat,实现了端口的复用。然后在Nginx的配置中,设置了一个反向代理,配置如下:

 server {
    listen       80;    
    server_name  xxx.com;
    location / {
        proxy_pass http://127.0.0.1:8080/xxx/;
    }
}

由此可知,对于一个请求,首先是通过了原始路径xxx.com,然后经过代理路径http://127.0.0.1:8080/xxx/,这个时候由于原始路径和代理路径发生了变化,从而导致session 丢失,Tomcat服务器获取到的session无效。

4. 直接访问

为了验证是否是nginx的问题,我选择直接通过ip地址的方式访问,也就是说越过nginx直接访问Tomcat,当然这个过程也是出了一点问题了,比如静态资源访问不了等,这个就不展开说了。尝试直接访问后发现,这个时候就没有出现验证码错误了,也就是说,我的猜想的对的。

5. 通过Nginx配置解决问题

既然知道了问题的根源,那么接下来就是想办法通过配置解决这个session丢失的问题。后来经过一番查阅发现,可以通过设置proxy_cookie_path来解决这个问题,官方文档如下:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html

Nginx配置如下:

 server {
    listen       80;    
    server_name  xxx.com;
    location / {
        proxy_pass http://127.0.0.1:8080/xxx/;
        proxy_cookie_path  /xxx /;
    }
}

然后重新reload一下nginx,如此一来,就解决了nginx反向代理导致session丢失的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题) 的相关文章

随机推荐

  • 3、ESP8266入门(AT模式)——手机与ESP8266通信(AP模式)

    实现手机与ESP8266最简单通信 关于指令参考安信可官方指令 https wiki ai thinker com esp8266 docs at 在AT指令处下载即可 xff0c 还有一个是使用实例 xff0c 也可以具体看看 实验是以这
  • pytorch中的dim=0,=1,=2,在高纬度上的一些个人理解

    编译工具 xff1a Pycharm 张量工具 xff1a pytorch 目前大部分博主对dim的讲解大多停留在低维 xff0c 在这里我说一下高维的情况 xff0c 先看图 xff1a 在上图中 xff0c 我们用pytorch中声明了
  • Makefile 学习笔记

    Makefile 学习笔记 1 hello world b a 64 echo span class token string 34 hello b 34 span a 64 echo span class token string 34
  • Linux Git 学习笔记

    1 版本的创建 xff1a span class token function git span init span class token comment 初始化 span span class token function git sp
  • GDB学习记录

    1 基本用法 在gcc g 43 43 参数里加上 g xff0c 生成的文件会包含调试程序 xff0c 不加该参数则不包含调试程序 xff0c 不利于gdb调试 基本命令 xff1a list或者l xff1a 显示调试对象的代码文本内容
  • 【Python】输入3个数,输出它们的乘积。

    问题描述 xff1a 输入3个数 xff0c 输出它们的乘积 效果 输入第一个数 xff1a 5 输入第二个数 xff1a 5 输入第三个数 xff1a 8 200 进程已结束 xff0c 退出代码 0 代码 xff1a x 61 int
  • For frame [laser]: Fixed Frame [map] does not exist此类问题解决

    又是一个容易被新手忽略的小问题 当我们使用rviz时 xff0c 比如运行雷达后没有点云数据 xff0c 即使我们能看到发布了 scan话题 像这样 xff0c 就是没点云图 xff0c 看一下laserscan提示的错误 xff1a Fo
  • VMware虚拟机如何为GPU直通启用

    查阅了很多资料是 目前的我的电脑显卡不支持 xff0c 基本上N卡的好多常用卡都不支持 具体可以查看以下内容 https www dell com support article zh hk sln288103 E5 A6 82 E4 BD
  • pycharm修改远程服务器文件后,上传报错无法传输文件 ‘D:\xxx‘: could not write to xxxx

    原因是文件权限问题 A用户在服务器创建文件 xff0c 然后让B用户进入改文件操作代码 xff0c 这个时候会遇到权限问题 解决办法 xff1a cd 到需要修改权限的目录下 运行 sudo chmod 777 hhs R xff08 hh
  • 故障案例:连接服务器失败/服务器无法上网

    今日内容 安装过程补充 安装界面其他内容 磁盘分区 xshell优化 远程连接排错流程 远程连接常见故障原因 Linux基本规则 Linux常见命令 和 快捷键 运维新手学习什么内容面试 招聘者 CEO 怎么判断这个人是否有能力 0 态度
  • cmd中conda无法使用

    运行后会弹出一个conda exe窗口但是马上就会关闭 但是在命令行依旧没有任何反应 去查看了一下path中的环境变量也都存在 进入Anaconda Prompt中输入conda也是这样 有没有大佬知道为什么啊
  • 阿里云生活物联网平台搭建

    总括 xff1a 本项目主要实现上位机可以实时显示单片机 xff08 下位机 xff09 采集的数据 xff0c 同时上位机也可以发送指令控制单片机 在项目中需要用到上位机 xff0c 目前采用 阿里云生活物联网平台 提供的手机APP xf
  • python作业

    这里写自定义目录标题 python简单程序1 九九乘法表2 求1 2 43 3 4 43 5 99的所有数的和3 输入一行字符 xff0c 分别统计出其中英文字母 空格 数字和其它字符的个数4 python求阶乘之和 xff0c 1 xff
  • linux突然所有命令未找到,显示bash: xxxxx: command not found...

    出现这个问题是因为系统的环境变量没有正确配置造成的 xff0c 造成这个原因有很多 xff0c 解决的方式有两种 一 xff1a 直接在linux命令行界面输入如下 xff0c 然后回车 xff08 导入环境变量 xff0c 以及shell
  • HTML5——如何在网页中加入图片和超链接。

    声明 xff1a 此页内容极度简单 xff0c 觉得low的话我可以不看 寻找图片 xff0c 把图片的位置记好 xff0c 并且重命名 xff0c 方便寻找 写出基本框架 xff0c 引用 lt img gt 标签 找出你需要跳转的网页
  • MacOS VsCode C++连接mysql

    使用Cmake 1 CmakeLists txt配置 cmake minimum required VERSION 3 18 project MYSQL include directories 34 usr local mysql 8 0
  • Linux系统MySQL8版本修改密码的方法

    MySQL8和MySQL5修改密码的sql差别很大 xff0c 用了MySQL5的修改方法还可能掉坑里面 xff0c 本文介绍8版本的修改方法 1 登录MySQL mysql uroot p密码 2 切换到user数据库 use mysql
  • 用warp给minio测压

    拉取Docker镜像 看到拉取的warp镜像已经跑起来了 这里的docker run minio warp v0 4 5 h 就是查看 help文档 xff0c 上面那条语句原型是docker run minio warp v0 4 5 w
  • SpringBoot中的service报空指针异常

    SpringBoot中的service报空指针异常 异常排查 xff1a 1 检查Service是否加了 64 Service注解 2 Controller中的属性service是否加了 64 Autowired注解 3 检查所写的对外接口
  • 本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题)

    最近做一个课程项目 xff0c 在本地开发完后部署到服务器上 xff0c 一切都比较顺利 但是在登录用户的时候却一直显示验证码错误 xff01 xff01 xff01 排错过程 1 代码检查2 参数检查3 外层检查4 直接访问5 通过Ngi