天天看点

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

1、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 #此设置确保对每个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。

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

2、实现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的值。

若有问题可以留言~

继续阅读