Springsession nginx反向代理集成过程
一概述
springsession 配置,如果是sevlet的web应用后会自动集成 jdbc ,redis,Hazelcast,MongoDB
二session概述
2.1 分布式项目的session问题
在分布式项目中如果客户端给服务端发送了一个请求,在nginx做反向代理的情况下,第一个请求可能到达tomcat1,此时tomcat1就会创建一个session然后将响应给客户端;同理客户端再次发送一个请求,然后nginx又做了一次反向代理,此时的请求可能到达tomcat2,此时tomcat2会建立一个session响应给客户端;那么问题就产生了,同一个客户端发了2个请求,结果造成两次会话的数据不一致。
2.2主流的解决方案
针对2.1分布式session共享问题,当代主流的解决方案是使用redis做session以达到session共享的目的。请求达到不同的tomcat之后都会往同一个redis中写数据, 当tomcat响应数据的时候就会往同一个redis中读数据 以前我们需要手动的将tomcat获得的session数据存到redis,响应的时候再去redis中取数据。现在springsession会自动帮我们的数据从tomcat中同步到redis,或者自动的从redis中取数据。
三session共享实现方案
3.1环境说明
1jdk1.8
2redis5.05
3idea工具
4maven构建
5springboot 2.1.1
3.2pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> </parent> <dependencies> <!-- redis启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- web启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- spring session启动器 --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> </dependencies>
3.3application.yml
spring: redis: host: 192.168.0.104 port: 6379 database: 0 session: store-type: redis redis: cleanup-cron: 0 1 * * * *
3.4controller
package com.youku1327.spring.session.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; /** * @Author lsc * @Description //spring session * @Date 2019/9/22 14:01 * @Version 1.0 */ @RestController public class SpringSessionController { @GetMapping("set/spring/session") public String setSpringSession(HttpSession httpSession){ httpSession.setAttribute("user","youku1327"); System.out.println("设置session"); return "set spring session success"; } @GetMapping("get/spring/session") public String getSpringSession(HttpSession httpSession){ httpSession.setAttribute("user","youku1327"); System.out.println("响应session"); return httpSession.getAttribute("user").toString(); } }
3.5启动类
package com.youku1327.spring.session; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @Author lsc * @Description // * @Date 2019/9/22 13:29 * @Version 1.0 */ @SpringBootApplication public class SpringSessionApplication { public static void main(String[] args) { SpringApplication.run(SpringSessionApplication.class,args); } }
3.6启动两个实例
3.7测试
访问8080端口设置session
访问8083端口获得session
3.8默认是spring:session做为key前缀有需要改变可以在yml中配置
四nginx反向代理说明
在nginx安装目录的conf文件夹的nginx.conf
server { listen 端口; server_name 发布项目的ip地址; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass 转发的ip地址; proxy_connect_timeout 600; proxy_read_timeout 600; } }
配置2个server 分别 监听 8080 8083 端口 配置转发ip ,好后退出保存 nginx -s reload
我们就可以不同的访问转发ip实现nginx的反向代理
五参考文档
https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 使用Kubernetes部署Springboot或Nginx的详细教程
- 服务器使用Nginx部署Springboot项目的详细教程(jar包)
- Nginx反向代理springboot的jar包过程解析
- 实例详解SpringBoot+nginx实现资源上传功能
- springboot+nginx+https+linux实现负载均衡加域名访问简单测试
- SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法
- 使用dockercompose搭建springboot-mysql-nginx应用
- 关于Spring Boot WebSocket整合以及nginx配置详解
- Springmvc nginx实现动静分离过程详解
相关文章
java数据输出打印流PrintStream和PrintWriter面试精讲
这篇文章主要为大家介绍了java数据输出打印流PrintStream和PrintWriter面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务(微服务实战)
这篇文章主要介绍了SpringCloud 搭建企业级开发框架之实现多租户多平台短信通知服务,系统可以支持多家云平台提供的短信服务。这里以阿里云和腾讯云为例,集成短信通知服务,需要的朋友可以参考下2021-11-11SpringCloud集成zookeeper实现服务注册并访问功能
zookeeper和eureka一样,是用于充当服务注册功能服务器的一个springcloud插件,这篇文章主要介绍了SpringCloud集成zookeeper实现服务注册并访问,需要的朋友可以参考下2022-06-06Spring Security6 最新版配置及实现动态权限管理
Spring Security 在最近几个版本中配置的写法都有一些变化,很多常见的方法都废弃了,并且将在未来的 Spring Security7 中移除,因此又补充了一些新的内容,重新发一下,供各位使用 Spring Security 的小伙伴们参考,需要的朋友可以参考下2024-03-03Java语言实现简单FTP软件 FTP连接管理模块实现(8)
这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP连接管理模块的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-04-04Java filter中的chain.doFilter使用详解
这篇文章主要介绍了Java filter中的chain.doFilter使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
最新评论