2011年6月8日水曜日

HAProxyでCookieを使ったセッション維持

スズキです。

コチラでHAProxyのインストールまで行いましたが、
今回はCookieを用いたセッション維持の方法の紹介です。

といっても簡単で、下記のように"/etc/haproxy/haproxy.cfg"を設定するだけです。

...
backend web
    balance roundrobin
    cookie SERVERID insert nocache indirect
    server  web1 www.yahoo.co.jp:80  cookie web1 check
    server  web2 www.google.co.jp:80 cookie web2 check
...

上記の状態でアクセスすると、Cookie名"SERVERID"に"web1"か"web2"が
セットされるようになり、"web1"がセットされた場合は、そのセッションはYahooに、
"web2"がセットされた場合はGoogleに、振り分けられることになります。

実際に下記のようにアクセスすると、レスポンスに、
"Set-Cookie: SERVERID=web1; path=/"が確認できます。

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 08 Jun 2011 08:48:53 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: -1
Pragma: no-cache
Cache-Control: no-cache, private
Cache-Control: private, no-store, must-revalidate
X-XRDS-Location: http://open.login.yahoo.co.jp/openid20/www.yahoo.co.jp/xrds
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8
Set-Cookie: SERVERID=web1; path=/

Connection closed by foreign host.

Cookieヘッダに"SERVERID=web1; path=/"を指定してアクセスすると、
下記のようにYahooに振り分けられていることがわかります。

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
Cookie: SERVERID=web1; path=/

HTTP/1.1 200 OK
Date: Wed, 08 Jun 2011 08:50:35 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: -1
Pragma: no-cache
Cache-Control: no-cache, private
Cache-Control: private, no-store, must-revalidate
X-XRDS-Location: http://open.login.yahoo.co.jp/openid20/www.yahoo.co.jp/xrds
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.

ちなみに、"SERVERID=web2; path=/"を指定すると、
今度はGoogleに振り分けられていることがわかります。

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
Cookie: SERVERID=web2; path=/

HTTP/1.0 200 OK
Date: Wed, 08 Jun 2011 08:50:51 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: path=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=www.google.com
Set-Cookie: path=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=.www.google.com
Set-Cookie: path=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=google.com
Set-Cookie: path=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=.google.com
Set-Cookie: PREF=ID=8703eab7a7e73677:FF=0:TM=1307523051:LM=1307523051:S=Q4-05_nJblo1Zi6I; expires=Fri, 07-Jun-2013 08:50:51 GMT; path=/; domain=.google.com
Set-Cookie: NID=47=L-Dei5VoLakyt6ktub5q_xmLvFHyNj2ml_4TiZd-E2xjTDTgDQ-RawDmnhgml-0yqtKwBB_cVPB6ZbWkrLMHBCsbhD0IPz7MkEJt3acCqrMup3JTR-FC68hlWFHgGI3R; expires=Thu, 08-Dec-2011 08:50:51 GMT; path=/; domain=.google.com; HttpOnly
Server: gws
X-XSS-Protection: 1; mode=block
Connection: close

Connection closed by foreign host.

次はELBとの連動です。
--------
http://www.suz-lab.com

0 コメント: