haproxy基於cookie實現會話綁定
阿新 • • 發佈:2018-04-23
haproxy基於cookie實現haproxy的session綁定:
實驗前提:
1.本次實驗在centos7.2的64位系統實現
2.實驗有3臺主機,地址拓撲如下
haproxy代理:192.168.137.216
web1:192.168.137.131
web2:192.168.137.128
實驗前提:
1.本次實驗在centos7.2的64位系統實現
2.實驗有3臺主機,地址拓撲如下
haproxy代理:192.168.137.216
web1:192.168.137.131
web2:192.168.137.128
3.測試時請關閉防火墻和selinux以免帶來問題
一:安裝軟件
(1)配置web1
1.1 首先安裝web1服務器上的httpd
yum install httpd -y
1.2 在web1上httpd根目錄下寫入內容到index.html echo "this is web1" >/var/www/html/index.html 1.3 啟動httpd systemctl start httpd.service
(2)配置web2
2.1 安裝web2服務器上的httpd
yum install httpd -y
2.2 寫入內容到httpd根目錄
echo "this is web2" > /var/www/html/index.html
2.3 啟動httpd
systemctl start httpd.service
(3)配置haproxy
3.1 yum方式安裝haproxy
yum install haproxy -y
3.2 配置haproxy haproxy安裝後會在etc/haproxy目錄下生成haproxy.cfg的配置文件,大多數的配置選項都在這個文件中定義 打開配置文件然後修改零添加下列選項: backend webserver balance roundrobin cookie serverid insert nocache indirect server web1 192.168.137.131:80 check cookie webserver1 server web2 192.168.137.128:80 check cookie webserver2
3.3 啟動haproxy
systemctl start haproxy.service
註言: 在實驗中我使用的cookie的選項是insert,nocache和indirect.這幾個選項的作用不同. indirect: 如果不配合"indirect"選項,服務端可以看到客戶端請求時的所有cookie信息。如果配合"indirect"選項,則haproxy在將請求轉發給後端時,將刪除自己設置的cookie,使得後端只能看到它自己的cookie,這樣對後端來說,整個過程是完全透明的,它不知道前面有負載均衡軟件 preserve: 如果insert關鍵字配合"preserve"關鍵字,那麽當後端設置了cookie時,haproxy將強制保留該cookie,不做任何修改。例如在後端服務器上的應用程序也設置了cookie,例如後端的cookie名稱為PHPSESSID,那麽也就是說,如果將haproxy的cookie名稱也設置為PHPSESSID,那麽客戶端第一次請求時收到的響應報文中將只有一個"Set-Cookie"字段,且這個字段的值是後端服務器設置的,和haproxy無關 ignore-persist: 其實,通過cookie表保持和後端的會話只是默認情況,haproxy允許"即使使用了cookie也不進行會話綁定"的功能。這可以通過ignore-persist指令來實現。當滿足該指令的要求時,表示不將該cookie插入到cookie表中,因此無法實現會話保持,即使haproxy設置了cookie也沒用。 例如: backend dynamic_group acl url_dynamic path_end -i .php ignore-persist if url_dynamic cookie app_cook insert nocache server app1 192.168.100.60:80 cookie app_server1 server app2 192.168.100.61:80 cookie app_server2 這表示當請求uri以".php"結尾時,將忽略會話保持功能。這表示,對於php結尾的請求,app_cook這個cookie從頭到尾都是擺設 當然,上面的設置是不合理的,更合理的應該是這樣的 acl url_static path_beg /static /images /img /css acl url_static path_end .gif .png .jpg .css .js ignore-persist if url_static 與ignore-persist相對的是force-persist,但不建議使用該選項,因為它和option redispatch沖突
實現的結果截圖:
在其中有cookie首部,值是我剛才設置的webserver1.多次訪問的也都是web1
![](http://i2.51cto.com/images/blog/201804/23/37811dba033f582f5c1df1ebbb45d01a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
此次試驗到此結束!
如有不當之處請指出,作者會努力修改!
haproxy基於cookie實現會話綁定