nginx——session共享

举报
小白弟弟 发表于 2022/01/24 11:09:03 2022/01/24
【摘要】 1、Session共享http 协议是无状态的,即你连续访问某个网页 100 次和访问 1 次对服务器来说是没有 区别对待的,因为它记不住你。那么,在一些场合,确实需要服务器记住当前用户怎么办? 比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密 码吧,为了解决这个问题,session 的方案就被提了出来,事实上它并不是什么新技术, 而且也不能脱离 http ...

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 的功能。(基本不用)

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 中加入

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
	memcachedNodes="n1:192.168.20.105:11211" 
	sticky="false" 
	lockingMode="auto" 
	sessionBackupAsync="false" 
	requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" 
	sessionBackupTimeout="1000" 
	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.Kry oTranscoderFactory"/> 

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

我是小白弟弟,一个在互联网行业的小白,立志成为一名架构师
https://blog.csdn.net/zhouhengzhe?t=1

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。