`
030710314
  • 浏览: 22367 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx + tomcat 导致session丢失的问题

    博客分类:
  • JAVA
阅读更多

niginx 在做反向代理的时候,如果代理的目录地址和用户访问的目录地址不在同一个层级下的时候,即

 

server {
   listen 80;
   server_name www.bzf.com;
location / {      
        proxy_pass http://127.0.0.1:8090/sso;
}
}

 

如上所示,若用户访问 www.bzf.com,则会被nginx代理到本地8090端口下的sso项目下,

tomcat是通过cookie中的JsessionId来判断是否是一个新用户的,使用上述代理方式时,tomcat会将JsessionId写入www.bzf.com域名下的/sso路径下面。

 

用户下次再访问 www.bzf.com 的时候,发送给服务器的请求拿不到 /sso 路径下的 JsessionId,因此tomcat 会一直认为是一个新用户,这从/sso 路径下的 JSessionId会一直变化也可以看到。

 

上述分析表明,我们要让用户拿到它上次写入的JsessionId才可以,因为用户访问的域名是 www.dzf.com,这我们不能改变,因此应改变保存JSessionId的cookie的路径,将该路径变为 “/” 即可,这可通过nginx 的 proxy_cookie_path 来设置,将 tomcat 写入的 /sso 路径下的cookie 变为"/" 路径下,添加两行代码如下:

 

server {
   listen 80;
   server_name www.bzf.com;
location / {      
        proxy_pass http://127.0.0.1:8090/sso;
        proxy_cookie_path /sso/ /;
        proxy_cookie_path /sso /;
}
}
分享到:
评论
1 楼 SEkin 2018-04-28  
太棒了,找了两天,到处找资料和原因,终于在这BINGGo 了,我靠,我还是太嫩了对nginx

相关推荐

    nginx+tomcat+redis完成session共享

    这个小例子"nginx+tomcat+redis完成session共享"旨在演示如何通过这三种技术实现跨服务器的用户会话共享,以提升用户体验并简化系统管理。以下是这些技术及其在会话共享中的作用: 1. **Nginx**:Nginx是一款高性能...

    nginx+tomcat7+memcached session会话保持

    在分布式系统中,用户可能与集群中的任何一台服务器交互,如果没有有效的会话保持机制,每次请求都可能分配到不同的服务器,导致用户会话丢失。Nginx作为反向代理服务器,可以很好地处理这个问题,通过特定的配置...

    Nginx+Tomcat+Memcached共享session集群配置

    然而,传统的基于 Cookie 的会话管理方式在这样的架构下会遇到 Session 共享的问题,即用户在不同的 Tomcat 实例之间切换时可能会导致会话丢失。为了解决这一问题,通常会采用 Memcached 这样的分布式缓存系统来存储...

    Nginx+tomcat 实现负载均衡session共享demo

    `session`在Web应用中用于存储用户状态信息,如果在`Nginx`负载均衡下不共享,会导致用户在切换服务器时丢失`session`数据。有几种常见的解决方案: 1. **Cookie-Based**:将`session ID`存储在cookie中,每次请求...

    redis缓存服务器Nginx+Tomcat+redis+MySQL实现session会话共享

    在某些情况下,session信息可能会持久化到MySQL,以防止session丢失或在服务器重启后恢复session。 **实现步骤**: 1. **配置Redis**:首先,你需要安装并配置Redis服务器,确保它可以在所有相关服务器上运行并监听...

    nginx+tomcat7负载均衡+redis缓存session

    在构建高性能、高可用性的Web应用系统时,"nginx+tomcat7负载均衡+redis缓存session"是一种常见的架构模式。这种模式结合了Nginx的反向代理和负载均衡能力,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用于...

    Nginx+Tomcat+Memcached集群Session共享

    但是,由于每个Tomcat实例都有自己的Session存储,如果用户在集群中的不同服务器之间切换,会导致Session丢失。这就是需要解决的问题。 为了解决这个问题,引入了Memcached,这是一个高性能的分布式内存对象缓存...

    nginx+tomcat6+redis实现session共享Jar文件

    这个配置允许多个Tomcat服务器之间共享用户session,避免了用户在切换服务器时需要重新登录的问题。下面将详细介绍这一方案的各个组成部分及其工作原理。 首先,`nginx`是一个高性能的反向代理服务器和负载均衡器,...

    Nginx+Tomcat+Redis实现负载均衡过程中session所需架包

    在负载均衡场景下,每个Tomcat实例都需要独立处理用户的session,但由于session数据存储在服务器本地,当用户请求被转发到其他服务器时,会导致session丢失。为了解决这个问题,我们可以引入Redis来存储session。 ...

    Nginx + Tomcat +session共享.docx

    在这样的配置中,确保用户会话(Session)在多个 Tomcat 实例之间共享是至关重要的,以保证用户在访问过程中不会因为服务器切换而丢失登录状态或其他个性化信息。本文将详细介绍如何在 Nginx 和 Tomcat 集群中实现 ...

    nginx+tomcat shiro实现多tomcat下session共享

    例如,Redis的数据备份和恢复策略,以及防止因网络问题导致的session丢失或重复。 7. **性能优化**: 可以通过设置合适的session过期时间、使用Redis的持久化机制以及监控Redis的性能,来优化session共享的效率和...

    nginx+tomcat+memcached实现session共享

    在分布式系统中,每个Tomcat实例都有自己的session存储,这意味着当用户在不同服务器之间跳转时,如果不做特殊处理,他们的session信息无法共享,可能导致用户登录状态丢失。 为了解决这个问题,引入了Memcached,...

    Nginx+tomcat6+memcache配置集群session共享所需jar包

    在构建高性能、高可用性的Web应用系统时,集群和会话共享是两个关键点。这里我们关注的是如何通过...这样的配置不仅能够提高服务的可用性,还能确保用户在整个系统中的体验连贯性,避免了因session丢失导致的问题。

    nginx+redis实现session共享

    Redis的配置应确保数据的持久化,以防服务器重启导致session丢失。 3. 集成session存储:在应用程序(如Java的Tomcat)中,我们需要修改session的默认存储机制,将session数据保存到Redis中。这通常可以通过使用第...

    Nginx+Tomcat+Memcached实现负载均衡过程中session所需架包

    在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为分布式缓存来处理session共享问题。本文将详细讲解如何利用Nginx、Tomcat和Memcached...

    Nginx+Tomcat+Memcached集群

    在Nginx+Tomcat集群中,Memcached用于实现Session共享,避免用户在集群中的不同Tomcat实例间切换时丢失Session数据。当用户登录后,其Session信息会被存储在Memcached中,然后由Nginx确保请求被转发到具有该Session...

    nginx+tomcat+memcached

    在多服务器环境中,每个`tomcat`实例都有自己的session存储,如果用户在不同的服务器之间切换,会导致session丢失,影响用户体验。为了解决这个问题,我们引入了`memcached`。 `memcached`是一个分布式内存对象缓存...

Global site tag (gtag.js) - Google Analytics