nginx反向代理导致session失效的问题解决_nginx

来源:脚本之家  责任编辑:小易  

给你2种解决方案.默认情况(php自带的文件实现)这种情况.需要设置sess 文件存储位置是个网络位置.例如 设置2号机器的sess存储目录为 1号机器的sess存储目录,(需要挂载实现)这样的话,就保证了多台机器读取写入的是同一个sess文件.使用mysql,memcache,mongodb,redis 等 实现.这个稍微麻烦些.需要写实现代码.然后用php内置的函数(session_set_save_handler)注册扩展还可以用自己的方式单独实现.(这个更麻烦些,可以参考下一些开源系统的实现)www.zgxue.com防采集请勿采集本网。

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

背景

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

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

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

定位

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

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

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

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

location /health-dev/ { proxy_pass http://192.168.40.202:8080/health/;}

浏览器访问 http://www.domian.com/health-dev 时,服务端返回的 Set-Cookie 的 Path 值为 /health (因为中间有反向代理,服务端并不知道代理前的路径是啥,是按最终请求服务端的路径设置),如图

因为浏览器访问地址的路径 /health-devSet-Cookie 的 Path /health 不匹配,所以浏览器并不会将其值存入Cookie中,如图

因此在下次请求服务器时,浏览器无法设置request Cookie header的 JSESSIONID 值,服务器无法定位到对应的session,因此会将其当做第一次请求,创建一个新的session,如此反复,因此就算你登录认证通过了,但服务器返回的登录凭证(JSESSIONID)浏览器不会保存,并在下次请求时携带,导致服务器认为你是一个新的请求,当然就会又跳到登录页面了。

解决

nginx有一个命令 proxy_cookie_path (参考: proxy_cookie_path )可将服务器返回的 Set-Cookie 中的path进行修改,格式为 proxy_cookie_path 原路径 目标路径 ,我们在配置中添加 proxy_cookie_path 如下。

location /health-dev/ { proxy_pass http://192.168.40.202:8080/health/; proxy_cookie_path /health /health-dev;}

重启nginx,问题解决。

到此这篇关于nginx反向代理导致session失效的问题解决的文章就介绍到这了,更多相关nginx反向代理导致session失效内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

HTTP / 1.1 403年被禁止的服务器:nginx / 1.4.1日期:2013年8月32313133353236313431303231363533e59b9ee7ad943133333262666413日星期二,05:35:51 GMTcontent - type:text / html;charset = utf - 8传输编码:分块连接:关闭x驱动:PHP / 5 4 13设置cookie:SESS4d53248a9b2f82875a69aabd66665d85 = lbq1usdgh6l7qlqn76vvo375s1;期满=(05 - 9月- 2013 09:09:11 GMT;路径;.resellerclub.com domain = = /设置cookie:rclub_location = CN =结婚,到期,14 - 8月- 2013 05:35:51 GMT设置cookie:rclub_site = CN =结婚,到期,14 - 8月- 2013 05:35:51 GMT地点:http://china.resellerclub.com/admin/upfile.asp过期:太阳,1978年11月19 05:00:00 GMT最后修改:星期二,2013年8月13日05:35:51 GMTcache - control:no - cache,则存储,必须重新验证cache - control:post检查= 0,提前预支= 0内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • nginx session丢失问题处理解决方法
  • nginx session共享问题解决方案解析
  • 详解nginx反向代理实现会话(session)保持的两种方式
  • nginx+redis实现session共享
  • nginx+tomcat实现负载均衡,使用redis session共享
  • nginx中共享session会话配置方法例子
  • nginx 负载均衡 多站点共享session
  • 详解nginx反向代理websocket响应403的解决办法
  • nginx缓存cache的配置方案以及相关内存占用问题解决
  • centos7编译安装nginx的方法步骤
  • 简介使用nginx plus的在线活动监控功能的方法
  • 加速nginx性能: 开启gzip和缓存
  • nginx+fastdfs搭建图片服务器的方法实现
  • nginx下支持path_info的方法实例详解
  • nginx的安装和多域名配置的实现方法
  • 反向代理缓存的详细介绍
  • nginx修改配置限制恶意爬虫频率
  • 下面这些是什么意思?
  • php两台机器如何session同步
  • iis 在运行php 时出现您所查找的页面无法显示,因为使用了无效的方法(HTTP 动作)进行访问。
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginx session丢失问题处理解决方法nginx session共享问题解决方案解析详解nginx反向代理实现会话(session)保持的两种方式nginx+redis实现session共享nginx+tomcat实现负载均衡,使用redis session共享nginx中共享session会话配置方法例子nginx 负载均衡 多站点共享session详解nginx反向代理websocket响应403的解决办法nginx缓存cache的配置方案以及相关内存占用问题解决centos7编译安装nginx的方法步骤简介使用nginx plus的在线活动监控功能的方法加速nginx性能: 开启gzip和缓存nginx+fastdfs搭建图片服务器的方法实现nginx下支持path_info的方法实例详解nginx的安装和多域名配置的实现方法反向代理缓存的详细介绍nginx修改配置限制恶意爬虫频率nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪nginx下301重定向域名的方法小结详解nginx服务器中配置超时时间的windows下nginx+php5的安装与配置分析nginx日志并屏蔽采集者ip(nginx屏蔽一句简单命令重启nginxwindows下nginx + php5 的安装与配置方法nginx+ssl实现双向认证的示例代码nginx下支持path_info的方法实例详解nginx防止直接用ip访问web服务器的设置方详解nginx服务器的配置中开启文件gzip压缩nginx服务器中使用gzip压缩的相关配置解析nginx下让wordpress支持固定链接的伪静态nginx服务器中的重定向配置参考指南
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved