...
Info |
---|
title | Shell scripting example |
---|
|
$ while true; do curl http://10.0.0.10; sleep 1; done This is HTTP server websvr1 (192.168.1.71). This is HTTP server websvr2 (192.168.1.72). This is HTTP server websvr1 (192.168.1.71). ^C $ curl http://10.0.0.10 -D /dev/stdout HTTP/1.1 200 OK Date: ... Server: Apache/2.4.6 () Last-Modified: ... ETag: "26-5125afd089491" Accept-Ranges: bytes Content-Length: 38 Content-Type: text/html; charset=UTF-8 Set-Cookie: WEBSVR=2; path=/
This is HTTP server svr2 (192.168.1.72). $ while true; do curl http://10.0.0.10 --cookie "WEBSVR=2;"; sleep 1; done This is HTTP server websvr2 (192.168.1.72). This is HTTP server websvr2 (192.168.1.72). This is HTTP server websvr2 (192.168.1.72). ^C |
To enable persistence selectively on a web server, use thecookie
directive to specify that HAProxy should expect the specified cookie, usually a session ID cookie or other existing cookie, to be prefixed with theserver cookie
value and a~
delimiter, for example:
Code Block |
---|
|
cookie SESSIONID prefix
server websvr1 192.168.1.71:80 weight 1 maxconn 512 cookie 1 check
server websvr2 192.168.1.72:80 weight 1 maxconn 512 cookie 2 check |
If the value of SESSIONID
is prefixed with a server
cookie
value, for example: Set-Cookie: SESSIONID=N
~Session_ID
;
, HAProxy strips the prefix and delimiter from the SESSIONID
cookie before forwarding the request to the web server whose server cookie
value matches the prefix.
The following example demonstrates how using a prefixed cookie enables session persistence:
Info |
---|
title | Shell scripting example |
---|
|
$ while true; do curl http://10.0.0.10 --cookie "SESSIONID=1~1234;"; sleep 1; done This is HTTP server websvr1 (192.168.1.71). This is HTTP server websvr1 (192.168.1.71). This is HTTP server websvr1 (192.168.1.71). ^C |
A real web application would usually set the session ID on the server side, in which case the first HAProxy response would include the prefixed cookie in the Set-Cookie:
header.