nginx——session共享

网友投稿 806 2022-05-29

1、Session共享

http 协议是无状态的,即你连续访问某个网页 100 次和访问 1 次对服务器来说是没有 区别对待的,因为它记不住你。那么,在一些场合,确实需要服务器记住当前用户怎么办? 比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密 码吧,为了解决这个问题,session 的方案就被提了出来,事实上它并不是什么新技术, 而且也不能脱离 http 协议以及任何现有的 web 技术。

session 的常见实现形式是会话 cookie(session cookie),即未设置过期时间 的 cookie,这个 cookie 的默认生命周期为浏览器会话期间,只要关闭浏览器窗口, cookie 就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包 含 sessionid,如果未包含,则系统会创造一个名为 JSESSIONID 的输出 cookie 返回 给浏览器(只放入内存,并不存在硬盘中),并将其以 HashTable 的形式写到服务器的内 存里面;当已经包含 sessionid 是,服务端会检查找到与该 session 相匹配的信息,如 果存在则直接使用该 sessionid,若不存在则重新生成新的 session。这里需要注意的 是 session 始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的 cookie 被 禁止后 session 就需要用 get 方法的 URL 重写的机制或使用 POST 方法提交隐藏表单的 形式来实现。

首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不 存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话 id 在客户端是没有问题的,但是如果用户的两次请求到了两台 不同的机器,而它的 session 数据可能存在其中一台机器,这个时候就会出现取不到 session 数据的情况,于是 session 的共享就成了一个问题。

1.1、session 一致性解决方案

1.1.1、session 复制

tomcat 本身带有复制 session 的功能。(基本不用)

nginx——session共享

1.1.2、共享 session

需要专门管理 session 的软件, memcached 缓存服务,可以和 tomcat 整合,帮助 tomcat 共享管理 session。

1.2、安装memcached

1.2.1、 node2 和 node3 上安装 jdk 和 tomcat

[root@node2 apps]# rpm -ivh jdk-7u80-linux-x64.rpm [root@node2 apps]# find / -name '*java*' #可以看出/usr/java/jdk1.7.0_80/ 配置环境变量 [root@node2 jdk1.7.0_80]# vim /etc/profile 加入以下两行代码: export JAVA_HOME=/usr/java/jdk1.7.0_80 export PATH=$PATH:$JAVA_HOME/bin 让文件生效: [root@node2 apps]# source /etc/profile [root@node2 apps]# jps 13894 Jps #说明 jdk 安装配置成功 解压 apache-tomcat-7.0.69.tar.gz 修改 ROOT/index.jsp,dG 全删后,添加: from 192.168.20.102 session=<%=session.getId()%> 另外一台 node3 同样的安装配置操作。 然后分别访问 node2 和 node3 都可以正常,刷新 session 也不会变。 修改 nginx.conf upstream rss { server 192.168.20.102:8080; server 192.168.20.103:8080; } 访问测试 http://www.sxthenhao.com/toms,刷新 session 一直改变。

1.2.2、nginx1 上安装 memcached

1、安装 libevent

yum install libevent -y

2、安装 memcached

yum install memcached -y

3、启动 memcached

memcached -d -m 128m -p 11211 -l 192.168.20.95 -u root -P /tmp/ -d:后台启动服务 -m:缓存大小 -p:端口 -l:IP -P:服务器启动后的系统进程 ID,存储的文件 -u:服务器启动是以哪个用户名作为管理用户

1.8.3 配置 session 共享(node2 和 node3)

1、拷贝 jar 到 tomcat 的 lib 下,jar 包见附件

2、配置 tomcat,每个 tomcat 里面的 context.xml 中加入

tomcat 添加 jar 包和配置信息之后需要重启

我是小白弟弟,一个在互联网行业的小白,立志成为一名架构师

https://blog.csdn.net/zhouhengzhe?t=1

Nginx

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Windows 10安装MySQL—5.6.4数据库
下一篇:冯 · 诺依曼结构原理及层次结构分析
相关文章