Nginx服务器对session的处理策略

继上篇问题,Nginx除了通过绑定IP地址即ip_hash策略这种黏性session外,

还有其他两种策略,分别为session复制方案与使用memcached或其他的额外空间方案。

这里我们先讨论下ip_hash方案。

ip_hash策略好不好,其实,这确实是一种简单粗暴但很高效的方式,不需要做过多的配置工作,不过不好之处在于其容错性差,一旦所绑定的Tomcat服务器或者其他后端服务器出现了故障,那么用户的所有session将面临丢失。不过这个也因应用而异吧,毕竟每台服务器会出现故障的情况概率也是很小的,如果应用能过允许这样的一种错误概率,其实ip_hash策略也是一个不错的选择。

session复制方案
session复制方案,即只要某台服务器的session发生了改变,则他会向他所有其他的在服务器群上的服务器发出广播事件,让他们也把相应的session做出改变。已达到所有服务器群上的服务器的session保持一致的目的。优点,首先是具有容错性,另外就是不同服务器上保留着相同的session,用户如果发生切换服务器时session响应非常及时;但这样做也有一个致命的缺点,这个缺点是来自于服务器群间的网络广播事件,如果后端服务器群组比较多或者当session比较大时,网络广播会极大地消耗网络性能,甚至造成整个网络的瘫痪。

关于如何设置的问题,第一是先在Tomcat.server.xml中开启该复制选项,如下图所示,第二则是在应用中指定应用处于分布式部署环境之下。即在应用中,在web.xml代码中指定分布式环境,添加<distributable>字段;

这里我们可能得注意两个问题,一个是如端口号的问题,也就是说需要指明端口号,另外一个就是Tomcat服务器的内网地址与外网地址问题,我们知道,一个服务器一般至少都会存在两个ip地址,即内网地址与外网地址。如果我们的服务器群上绑定的是内网地址,那么我们需要进行说明,不然可能会出现错误的现象,这个时候我们可以在Channel中的Receiver进行说明,命令配置如下:

使用memcached或其他的额外空间方案:
每个服务器需要session时都去该空间读取信息。如可以使用memcached(依赖于libevent库)

Memcached方案也可以分为两种,一种是基于黏性session的memcached方案,(如图一)一种则是基于非黏性session的memcached方案(如图二)

 

 


   


  黏性session的memcached方案的工作原理,假如用户的sessionA存入了Tomcat1,那么Tomcat1会把A存入自己的内存中,同时复制一份,提交给自己的memcached,(图中的memcached之间是互相广播的,他们之间的session值是相同的),假如Tomcat1发生了宕机现象,请求被转移到了Tomcat2上,那么Tomcat2会根据传过来的cookie去自己的内存中寻找sessionA,找不到时便会从自己依赖的memcached上进行读取,读取下来后便同样会做复制,将值存入自己的内存中,下次便可以直接从自己的内存中读取了。也就是说,在这种黏性session的memcached中,如果不发生宕机,memcached只扮演了一个备份的角色,读取修改操仍然在Tomcat中进行。
非黏性session的memcached方案的工作原理:假如用户的sessionA操作的是Tomcat1,那么Tomcat1会把值直接存入自己的备份memcached中,另一个用户访问Tomcat2,那么Tomcat2也会把值直接存入自己的备份memcached中。这些备份memcached会以广播的形式通知自己的主存储memcached,使得主存储memcached具有全部的session,当用户再次Tomcat1时,他会去主存储memcached中读取sessionA。也就是说,在这样一种模式下,Tomcat1并不起存储session的功能,所有的读取修改操作的关键依赖于主存储memcached,这就是非黏性session。

 

在配置时只需要去官网下载相关的Jar包即可,然后再Tomcat中配置Context即可,再哪里配置Context这个问题上,个人的看法是:

关于Context配置:
1.conf/context.xml下,属于全局配置,作用于所有应用;
2.conf/[enginename]/[hostname]/context.xml.default 全局配置,作用于指定host下全部应用;
3.conf/[enginename]/[hostname]/[contextpath].xml 只作用于contextpath指定的应用;
4.应用META-INF/context.xml只作用于本应用;
5.conf/server.xml <Host>下,作用于Context docBase指定的应用

所有,只希望session管理作用于特定应用,最好用3,4 方式设置,希望能够作用于全体,可用于1,2,5设置
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Nginx是一款高性能的Web服务器和反向代理服务器,它可以通过反向代理的方式来代理会话。通过Nginx代理会话,可以实现负载均衡和高可用性。 在Nginx中代理会话的方式有多种,其中一种常见的方式是使用Nginx的负载均衡模块来实现。通过配置负载均衡模块,可以将请求转发给多个后端服务器,从而分担服务器的负载。一般来说,可以使用轮询、权重、IP哈希等方式来决定请求应该转发到哪个后端服务器上。 当用户发起一个新的会话请求时,Nginx可以根据预先定义的规则将请求转发给一个后端服务器,并在其中创建一个session。在这个会话过程中,Nginx会记录并管理与该会话相关的所有信息,包括会话的状态、用户的身份验证信息、会话的生命周期等。 通过Nginx代理session,可以实现会话的无缝切换和高可用性。当一个后端服务器出现故障或需要维护时,Nginx可以将该会话转发给其他可用的后端服务器,以确保用户的请求得到处理。这种方式可以提高系统的可用性和稳定性。 总结来说,Nginx代理会话是通过配置负载均衡模块来实现的,可以将会话请求转发给多个后端服务器,并在其中管理和记录会话的相关信息。这种方式可以实现负载均衡和高可用性,提高系统的性能和稳定性。 ### 回答2: nginx代理session是指通过nginx服务器来转发和处理HTTP请求中的session信息。在大多数情况下,nginx主要用于代理和负载均衡,不能直接处理请求的session信息。然而,在一些特定的场景下,如高并发情况下的负载均衡、高可用性等需求,我们可以使用nginx来代理session。 具体而言,当客户端发送请求到nginx服务器时,nginx会将请求转发给后端的应用服务器进行处理。为了确保多个应用服务器之间的session一致性,我们可以采用一些策略来实现nginx代理session。 一种常见的策略是使用"sticky session",即粘性会话。当客户端首次发送请求到nginx服务器时,nginx会根据一定的规则将该请求分发给特定的应用服务器,并且将该请求与特定的应用服务器建立关联。后续的请求都会通过nginx转发到同一个应用服务器上,从而保持session的一致性。 另一种策略是使用第三方模块,如ngx_http_upstream_session_sticky_module。该模块提供了基于cookie和参数的session粘性会话,并且可以配置session粘性的过期时间、session键和值等。 通过上述策略nginx代理session的工作原理是,当客户端发送请求到nginx服务器时,nginx会根据特定的算法或配置规则将请求转发给特定的应用服务器,并将该请求与特定的应用服务器建立关联。后续的请求都会通过nginx转发到同一个应用服务器上,并且保持session的一致性,从而实现nginx代理session的功能。 总之,nginx代理session能够帮助我们实现session一致性和负载均衡,并提高系统的性能和可用性。它是在特定场景下使用nginx服务器的一种有效的解决方案。 ### 回答3: nginx是一款开源的高性能Web服务器和反向代理服务器。它可以作为代理服务器,用于将客户端的请求转发给后端的服务器,并将服务器的响应返回给客户端。当需要实现基于Session的负载均衡时,可以使用nginx作为代理服务器来实现。 首先,在nginx配置文件中,需要定义一个upstream块来配置后端服务器列表。通过在upstream块中添加多个后端服务器的IP地址和端口号,nginx可以将请求按照一定的算法分发给后端服务器。 其次,可以通过nginx的location指令来配置Session的保持方式。可以使用proxy_pass指令将请求转发给后端服务器,并使用proxy_set_header指令来设置HTTP头信息,包括Cookie信息。这样,当客户端再次发送请求时,nginx会带上之前的Session信息,保持Session的连续性。 此外,为了实现Session的负载均衡,可以使用nginxSession Sticky模块。该模块可以通过检查请求的Cookie信息或者自定义的参数来判断该请求应该转发到哪个后端服务器。这样可以确保同一个客户端的请求总是被分发到同一个后端服务器,保证Session的正确性和连续性。 总结来说,使用nginx作为代理服务器,可以通过配置upstream块来实现Session的负载均衡,通过配置location指令和使用Session Sticky模块来保持Session的连续性。这样可以提高系统的可用性和性能,实现高效的Web应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值