[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

相關文章
相關標籤/搜索