nginx反向代理导致会话失效怎么办

  介绍

这篇文章主要为大家展示了nginx反向代理导致会话失效怎么办,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

一同事求援:后台系统的登录成功了,但不能成功登进系统,仍然跳转到登录页,但同一套代码另一个环境却没有问题。

经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个环境代码配置完全相同。两边通过同一个nginx进行反向代理,nginx配置大致如下,

位置/健康/{
  proxy_pass http://192.168.40.159:8081/健康/;#无问题的配置
  }
  
  位置/health-dev/{
  proxy_pass http://192.168.40.202:8080/健康/;#有问题的配置
  }

一个反向代理到开发环境,一个反向代理到本机服务。

既然代码配置完全相同,那么问题很大可能就出现在nginx的反向代理上。

因为两边位置路径不同(即浏览器路径不同),但是反向代理的服务端路径却相同,结合会话的基本原理,如下图,

 nginx反向代理导致会话失效怎么办

    <李>当浏览器第一次打开页面时,服务端会为这次会话创建一个会话,并将会话id通过回应的头传递给浏览器,头一般为set - cookie: JSESSIONID=xxxxx;李路径=xxxx李 <>浏览器接收到响应后,如果头set - Cookie中路径的值与浏览器地址路径匹配,则将该标题值存于浏览器的Cookie中李 <李>浏览器在下次请求服务器时,将饼干中的JSESSIONID值通过请求的标题上报给服务端,头一般为饼干:JSESSIONID=xxxx; <李>服务端可通过该JSESSIONID来定位到对应的会话
      李,

nginx反向代理按这种方式配置时

位置/health-dev/{
  proxy_pass http://192.168.40.202:8080/健康/;
  }

浏览器访问http://www.domian.com/health-dev <代码> 时,服务端返回的<代码> set - Cookie> /健康>

 nginx反向代理导致会话失效怎么办

因为浏览器访问地址的路径<代码>/health-dev 与<代码> set - Cookie> /健康>

 nginx反向代理导致会话失效怎么办

因此在下次请求服务器时,浏览器无法设置请求<代码>饼干头的<代码> JSESSIONID>

nginx有一个命令<代码> proxy_cookie_path> set - Cookie> proxy_cookie_path原路径目标路径> proxy_cookie_path>

位置/health-dev/{
  proxy_pass http://192.168.40.202:8080/健康/;
  proxy_cookie_path/健康/health-dev;
  }

重启nginx,问题解决。

以上就是关于nginx反向代理导致会话失效怎么办的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看的到。

nginx反向代理导致会话失效怎么办