Nginx Tomcat关于Session的管理的实现

发布时间:2024-12-29 点击:93
服务器
前言
nginx tomcat对session的管理一直有了解,但是一直没有实际操作一遍,本文从最简单的安装启动开始,通过实例的方式循序渐进的介绍了几种管理session的方式。
nginx安装配置
1.安装nginx
[root@localhost ~]# yum install nginx提示报如下错误:
no package nginx available.
解决办法安装epel:epel是企业版 linux 附加软件包的简称,epel是一个由fedora特别兴趣小组创建、维护并管理的,针对 红帽企业版 linux(rhel)及其衍生发行版(比如 centos、scientific linux、oracle enterprise linux)的一个高质量附加软件包项目;
[root@localhost ~]# yum install epel-release安装完之后,即可成功安装nginx;
2.启动、停止nginx
先进入nginx的目录
[root@localhost nginx]# cd /usr/sbin/执行命令
./nginx 开启./nginx -s stop 使用kill命令强制杀掉进程./nginx -s quit 待nginx进程处理任务完毕进行停止./nginx -s reloadnginx tomcat负载均衡
1.准备2个tomcat,分别指定端口为8081,8082
drwxr-xr-x. 9 root root 4096 may 7 14:16 apache-tomcat-7.0.88_8081drwxr-xr-x. 9 root root 4096 may 7 14:16 apache-tomcat-7.0.88_8082修改webapps/root的index.jsp,方便测试
<%if(request.getsession().getattribute(key)==null){ out.println(key is null,ready init.....); request.getsession().setattribute(key,value);}else{ out.println(key is not null,key= request.getsession().getattribute(key)); }%><br> sessionid:<%=session.getid()%> <br> sessioncreatetime:<%= session.getcreationtime() %><br><% out.println(tomcat port 8081); %> 最后的输出在两个tomcat下面指定各自的端口号8081和8082
2.nginx配置负载均衡(默认策略)
修改/etc/nginx/下面的nginx.conf
upstream tomcattest { server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082} server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://tomcattest; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { }}此处配置的负载均衡策略是默认的轮询策略,nginx还支持其他策略包括:ip_hash、weight、fair(第三方)、url_hash(第三方);
默认策略每个web请求按时间顺序逐一分配到不同的后端服务器,这种情况下每次请求都会创建一个新的session,下面做简单测试:
第一次请求http://ip/
key is null,ready init..... sessionid:e7a9782ded29ff04e21df94078cb4f62 sessioncreatetime:1527732911441tomcat port 8082第二次刷新http://ip/
key is null,ready init..... sessionid:7812e8e21dbb74cc7fbb75a0dff2e9cb sessioncreatetime:1527732979810tomcat port 8081第三次刷新http://ip/
key is null,ready init..... sessionid:8895f41e299785a21995d5f8bb734b86 sessioncreatetime:1527733011878tomcat port 8082可以发现每次都产生一个新的session,而且消息按时间顺序逐一分配到不同的后端服务器,一般需要保持session会话的网站都不允许出现每次请求都产生一个session;
3.nginx配置负载均衡(黏性session)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题;nginx可以通过在upstream模块配置ip_hash来实现黏性session;
upstream tomcattest { ip_hash; server 127.0.0.1:8081; #tomcat-8081 server 127.0.0.1:8082; #tomcat-8082}下面做简单测试:
第一次请求http://ip/
key is null,ready init..... sessionid:859badfb09a4eceaec5257f518c228a0 sessioncreatetime:1527734181450tomcat port 8081第二次刷新http://ip/
key is not null,key=value sessionid:859badfb09a4eceaec5257f518c228a0 sessioncreatetime:1527734181450tomcat port 8081第三次刷新http://ip/
key is not null,key=value sessionid:859badfb09a4eceaec5257f518c228a0 sessioncreatetime:1527734181450tomcat port 8081可以发现第一次请求设置了key=value,后面每次都能获取到key值,sessionid没有改变,tomcat也没有改变,实现了黏性session;
此时可以把port=8081的tomcat停掉,然后再观察
第四次刷新http://ip/
key is null,ready init..... sessionid:3c15fe2c8e8a9dcdc6ead48180b78b80 sessioncreatetime:1527735994476tomcat port 8082第五次刷新http://ip/
key is not null,key=value sessionid:3c15fe2c8e8a9dcdc6ead48180b78b80 sessioncreatetime:1527735994476tomcat port 8082可以发现消息转发到了tomcat-8082,并且session丢失,重新创建了新的session;
如何让这种情况session不丢失,也有两种方案:session复制和session共享;session共享从扩展性,性能方面都更加好,
下面重点介绍一下session共享如何实现;
nginx tomcat实现session共享
session共享思想就是把session保存到一个公共的地方,用的时候再从里面取出来,具体这个公共的地方可以是:redis,db,memcached等,下面已redis为实例
1.redis安装配置
yum install redis安装完成以后配置文件/etc/redis.conf
启动redis服务端
redis-server /etc/redis.conf启动客户端
redis-cli2.tomcat引入依赖的jar
$tomcat_home/lib添加如下jar包
<dependency> <groupid>com.bluejeans</grou

电脑最干净的浏览器是什么_电脑上的什么浏览器最干净图文教程
转入的主体备案号写错了-备案平台
刚刚提交和转入请求并且域名转入模板深圳 锐尔觅移动通信有限
企业如何域名保护?有什么方法?
入选Gartner指南!博云科技提供云管理解决方案
虚拟主机独立ip是什么
阿里云通用代金券免费发放,用券后云服务器只要82元/年
王国纪元云服务器挂机