[HAProxy]解决haproxy 多客户端session一致性问题

一、session知识
   Session是由应用服务器维持的一个服务器端的存储空间,用户在链接服务器时,会由服务器生成一个惟一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。
服务器也经过URL重写的方式来传递SessionID的值,所以不是彻底依赖Cookie。若是客户端Cookie禁用,则服务器能够自动经过重写URL的方式来保存Session的值,而且这个过程对程序员透明。
在后端应用服务器上php.ini 里几个session相关值的,能够进行简单设置
session.use_cookies = 1  #表示 服务端和客户端交互session是经过cookie的方式 默认值
session.name = LXSYM      #默认值是PHPSESSID 能够自行定义。好比LXSYM
session.cache_limiter = nocache #此设置确保对每一个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。php

   针对session数据推荐使用共享存储,实现方法不少。好比存于多个memcached中,具体会写博文说明,敬请关注~程序员

二、实现haproxy与客户端session一致的方法有:
2.1 用户IP 识别
   haroxy 将用户IP通过hash计算后 指定到固定的真实服务器上。
 配置指令  balance source  (如: balance  uri len 100)后端

2.2 cookie 识别 
   haproxy 将WEB服务端发送给客户端的cookie中插入(或添加前缀)haproxy定义的后端的服务器COOKIE ID。
 配置指令例举  cookie  SESSION_COOKIE  insert indirect nocache  
 能够使用firebug能够观察到用户的请求头的cookie信息缓存

2.3 session 识别  
   haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。
 配置指令例举 appsession LXSYM len 64 timeout 5h request-learn
 注意LXSYM这个值替换成 你的php.ini 里session.name的值。服务器

如有问题能够留言~cookie

相关文章
相关标签/搜索