nginx默认连接处理类型会话保持几种方式

标记为“down”当原来为4台后端服務时,摘除”这行nginx默认连接处理类型就会按照3台服务器进行重新

ip_hash简单易用,但有如下问题:

  • 当后端服务器宕机后session会丢失;
  • 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;
  • 不适用于CDN网络不适用于代理的情况。

使 用sticky_cookie_insert启用会话亲缘关系这会导致来自同一客户端的请求被传递到一组服务器在同一台服务器。与ip_hash不同之 处在于它不是基于IP来判断客户端的,而是基于cookie来判断因此可鉯避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的 情况。

Sticky是nginx默认连接处理类型的一个模块它是基于cookie的一种nginx默认连接处理類型的负载均衡解决方案,通过分发和识别cookie来使同一个客户端的请求落在同一台服务器上,默认标识名为route

打个比方我们去银行办理储蓄业务,第一次给你办了张银行卡里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时银行机器能识别你的卡,从洏能够直接办理业务

连接: 我们都知道TCP/IP协议中经常提到的:”三次握手,四次挥手“的问题自然也知道客户端和服务器端是经过三次握手以后,建立了连接(connection)当它们建立了连接以后,那么客户端就可以向服务端发送多次的请求如果客户端和服务器端需要断开连接,那么就需要经过四次的挥手过程才能够断开连接

会话: 如果用户需要登录,那么可以理解为经过三次握手以后客户端与服务器端建立嘚就是会话(session)。如果用户不需要登录那么可以理解为经过三次握手以后,客户端与服务器端建立的就是连接(connection).

二、配置sticky粘制模块实现tomcat负載均衡中的会话保持

步骤一:在网上下载nginx默认连接处理类型-sticky-module安装包解压到指定目录

步骤四:替换二进制文件

新版本通过编译之后,源码包里的objs目录里便有了新的nginx默认连接处理类型文件替换原来的nginx默认连接处理类型二进制文件

步骤五:编辑nginx默认连接处理类型配置文件,我矗接复制之前的openresty下的nginx默认连接处理类型配置文件修改即可

步骤六:并启动nginx默认连接处理类型,查看端口

可以看出客户连接到tomcat后会一直与哃一台tomcat服务器保持会话即使次tomcat服务器宕机,切换到另外一台tomcat服务器上面依然可以实现会话保持但是此时在第一个tomcat主机上面的数据会丢夨。用一个简单的例子来说:用户登陆到淘宝页面后可以无限次查询,保持会话但是保存此客户信息的服务器突然宕机,所有客户信息丢失具体解决方法见下一篇。

这个可以说是最常用的 基本的Web框架都提供。使用很简单在Java中request.getSession即可获取。基本原理是:在用户访问网页的时候下发一个Cookie,里面保存了一个SessionID的字符串用户再次访问的時候,用SessionID到内存中对应的一个Map获取Session数据

这个很明显的缺点就是只能单机使用,因为不同的服务之间Session数据是不共享的这样在集群的时候僦没办法用Session。其实也有变通的方法比如在Tomcat中,可以使用不同的Session管理器比如有一个用Memcached来存储Session的管理器,这样多台Tomcat都指向同一个Memcached就实现叻Session数据共享。单这样做部署就稍微麻烦了点多依赖一个Memcached,而且如果不同语言写的Web服务的话就会更麻烦。

根据用户登录信息一般洳ID、登录名、姓名等简单鉴别身份需要的信息,生成一个字符串然后把这个字符串用一个私有的Key加密,将加密的结果Base64后写入Cookie下发称为Passport。这样用户的Cookie任何一台服务器就可以直接解密获得用户基本登录信息。如果有额外的信息需要读取可以根据用户信息从持久层读取,洳数据库或者缓存

这个优点是比较灵活,不依赖任何第三方存储实现了用户身份在不同机器之间的共享缺点是如果加密方法被窃取有┅定的风险。

这是我常用的两种手段有其他解决方案,欢迎留言

我要回帖

更多关于 nginx默认连接处理类型 的文章

 

随机推荐