2014-01-11 1 views
3

앱 서버에 설정된 쿠키를 사용하여 요청을 haproxy로 어떻게 라우트 할 수 있습니까?기존 쿠키를 사용하여 라우팅

예 : SESS=<hash-of-username>

haproxy은 어떤 경우에 그 자체로 쿠키를 삽입하지 않아야합니다. 그냥 따라 요청 및 경로에서 쿠키를 읽으려면

답변

2

, 당신은 당신의 구성에서이 같은 작업을 수행 할 수 있습니다

frontend http 
    acl cookie_found hdr_sub(cookie) COOKIENAME 
    use_backend app_server if cookie_found 

backend app_server 
    balance roundrobin 
    server channel1 X.X.X.X:PORT #Host1 
    server channel2 Y.Y.Y.Y:PORT #Host2 
+0

쿠키 값을 사용하여 균형을 맞출 수는 없지만 쿠키가 있는지 만 확인합니다. –

+0

균형을 추가하기 위해 "백엔드"구성을 편집했습니다. 이것이 당신이 찾고있는 것이라면 나는 확실하지 않습니다. – Gooner

+2

아니요, 여전히 ** 쿠키 값 **을 사용하여 균형을 조정하지 않습니다. –

2

당신은 균형을 위해 기존의 쿠키를 사용할 수 없습니다, 당신은 할 수 방법을 URI 매개 변수를 사용하십시오. md5()를 사용하거나 쿠키의 해쉬 테이블을 만들 수는 없으며 최소한 문서화되어 있지는 않습니다. 다른 결과를 얻으려면 접두어 매개 변수를 쿠키에 사용할 수 있습니다. 그것은 당신이 찾고있는 것일 수도 있습니다 (당신이 또 다른 쿠키의 생성을 피하고 싶다면).

그래서 경우에 설정은 다음과 같이 보일 것이다 :

backend bk_web 
    balance roundrobin 
    cookie SESS prefix indirect nocache 
    server s1 192.168.10.11:80 check cookie s1 
    server s2 192.168.10.21:80 check cookie s2 

요청이 쿠키없이 도착

은 모든 서버는 라운드 로빈 요청에 의해 선택이로 리디렉션됩니다. 응답이 백엔드에서 도착하면 HAProxy는 SESS 쿠키를 확인하고 설정된 경우 서버 이름 (sX)을 쿠키에 추가하여 클라이언트에 보냅니다. 다음 요청은 그 쿠키를 보낼 때 HAProxy는 SX ~ 부분을

소스 스트립으로 브라우저에서 쿠키가 보이는 SX ~ 좋아하지만, 백엔드 서버는 쿠키에 를 본다 : load balancing, affinity, persistence, sticky sessions: what you need to know

5

나는이 방법을 추천 할 수 haproxy 뒤에 특정 서버를 테스트 :

frontend http 
    acl is_cookie_hack_1 hdr_sub(cookie) server_test_hack=server1 
    acl is_cookie_hack_2 hdr_sub(cookie) server_test_hack=server2 
    ... insert your normal acl rules here 

    use_backend bk_server_1 if is_cookie_hack_1 
    use_backend bk_server_2 if is_cookie_hack_2 
    ... insert your normal use_backend expressions here 

backend bk_server_1 
    ... 

backend bk_server_2 
    ... 

내가 내 브라우저의 JS 콘솔 B의 자바 스크립트에 의해 server_test_hack 쿠키를 삽입을 이 스크립트의 내용은 다음과 같습니다.

document.cookie="server_test_hack=server1"; 
+0

이 솔루션을 테스트하고 매력처럼 작동했습니다. 감사합니다! :) – marcostvz

관련 문제