首页 » 网站建设 » phpsession跳转掉效技巧_nginx反向代理导致session失落效的问题处理

phpsession跳转掉效技巧_nginx反向代理导致session失落效的问题处理

访客 2024-11-08 0

扫一扫用手机浏览

文章目录 [+]

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

一个反向代理到开拓环境,一个反向代理到本机做事。

定位

既然代码配置完备相同,那么问题很大可能就涌如今nginx的反向代理上。

phpsession跳转掉效技巧_nginx反向代理导致session失落效的问题处理

由于两边location路径不同(即浏览器路径不同),但是反向代理的做事端路径却相同,结合session的基本事理,如下图,

phpsession跳转掉效技巧_nginx反向代理导致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-dev 与 Set-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,问题办理。

[转载请注明出处]

作者:雨歌 欢迎关注作者"大众号:半路雨歌,查看更多技能干货文章

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读0 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读0 评论0