本文详细介绍了Nginx会话共享问题的解决方案。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值,有需要的盆友可以参考一下。
本文详细介绍了Nginx会话共享问题的解决方案。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值,有需要的盆友可以参考一下。
Nginx处理会话共享问题:
1.nginx或者haproxy做的三层交换机,nginx做的三层交换机可以配置ip_hash用haproxy做的三层交换机,可以配置平衡源,然后按照一个IP的要求,发送到同一个网络服务器;
2.使用数据库同步会话;;
3.cookie用于共享会话数据信息,但安全系数较差,必须引用http要求,增加了网络带宽消耗;
4.Tomcat配备了会话共享;
5使用会话集群存储Redis
1:建立工程项目,启动两只雄猫
2.编写一个servlet测试。
packagecom.zn.servlet; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; @WebServlet("/nginxSessionServlet") publicclassSessionIPServletextendsHttpServlet{ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ System.out.println("当今要求端口号:"request.getLocalPort()); Stringaction=request.getParameter("action"); //向Session中储放一个数据信息 if(action.equals("setSession")){ request.getSession().setAttribute("username","zhangsan"); }elseif(action.equals("getSession")){ response.getWriter().write((String)request.getSession().getAttribute("username")); } } protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ doPost(request,response); } }3.没有Nginx的实际浏览效果。
分别浏览8080和8081
4.配备nginx.conf文件
upstreammyserver{ ip_hash; server127.0.0.1:8080; server127.0.0.1:8081; } server{ listen81; server_namewww.bproject.com; location/{ roothtml; proxy_passhttp://myserver; indexindex.htmlindex.htm; } }再次浏览
模式二:使用spring-sessionRedis完成会话共享
1.引入并依赖
<!--springboot与redis运用基础自然环境配备--> <!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> <!--springsession与redis运用基础自然环境配备,必须打开redis后才能够应用,要不然起动Springboot会出错--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>2.创建一个控制器测试。
@RestController publicclassSessionController{ @RequestMapping("/setSession") publicStringsetSession(HttpServletResponseresponse,HttpServletRequestrequest)throwsIOException{ request.getSession().setAttribute("username","wang"); return"success"; } @RequestMapping("/getSession") publicStringgetSession(HttpServletRequestrequest,HttpServletResponseresponse){ Stringusername=(String)request.getSession().getAttribute("username"); returnusername; } }3:application.properties文件
server.port=8082 #server.port=8083 #redis配备 spring.redis.password:wang20034:开始新项目检测。
结果:方案简单,网络信息安全、稳定、高效,应用广泛。
注意:在Redis中删除这个数据文件,端口号8082和8083无法获取会话,说明会话没有存储在JVM中,而是转移到Redis中;
文章里的内容就这些了。期待对大家的学习和培训有所帮助,也期待大家的应用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)