Nginx负载均衡会话共享问题

1、什么是会话保持?

简单来说就是用户登录网站后,然后关闭浏览器,当下次在打开网站时,会发现还是处于登录状态,这个就可以理解为是会话保持的功能。

2、为什么要做会话保持?

HTTP协议是无状态的,在同一个连接主,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法再同一个网站中进行连续的交互,比如再一个电商网站里,用户把某个商品加入到购物车,切换一个界面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了那些商品。

3、会话保持实现的原理?

  • cookie:一般存放再浏览器中的cookies中。主要存放信息(session ID)
  • session:一般存放再服务端。主要存放信息有:(session ID对应的用户名、登录信息等)

4、用户访问动态网站时,cookie和session之间时如何工作的

  • 当用户首次请求服务端网站时,服务端会通过程序生成session_id,然后使用set-cookie的方式将session_id下发给浏览器,浏览器会将session ID存储至本地的cookies中
  • 当用户再次请求服务端网站时,浏览器会再Headers头信息携带该网站的cookie信息,那浏览器携带的cookie信息则时第一次请求网站时服务端给下发的session_ID
  • 用户登录该网站后,服务端会将对应的session_ID存储到(Mysql、Redis、Mencached、File)
  • 当用户下次在请求网站时,服务端程序会验证浏览器提交的session_ID
    在这里插入图片描述

5、使用负载均衡的时候遇到会话保持的问题,可以通过如下几种方式实现

  • session粘性:粘性session是指Nginx每次都将同一用户的所有请求转发至同一台服务器上,及Nginx的IP_hash
  • session复制:即每次session发生变化时,创建或修改,就广播给集群中的服务器,使所有的服务器上的session相同
  • session共享:缓存session至内存数据库中,使用redis、memcached
  • session持久化:将session存储至数据库中,像操作数据一样操作session
发布了28 篇原创文章 · 获赞 391 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Dakshesh/article/details/104457592