본문 바로가기
WEB/NGINX

6. Sticky Session

by coldplayer83 2024. 11. 12.
728x90

Nginx Plus에서는 아래 세 가지 세션 지속성 방법을 추가적으로 지원하며 설정값은 sticky 지시문을 사용

Nginx 기본 버전에서 세션 지속성을 유지하려면 hash 또는 ip_hash 지시문을 사용해야 함

 

1. Sticky Cookie (클라이언트 쿠키 기반)

클라이언트에서 들어오는 쿠키값을 기준으로 세션 지속성을 사용

Upstream 그룹의 첫 번째 응답에 session cookie를 추가하고 응답을 보낸 서버를 식별하는 방식

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}

 

srv_id : cookie name. initial client response에 쿠키의 이름을 설정함

expires : 브라우저가 cookie 유지하는 시간을 설정

domain : cookie가 설정된 도메인을 정의

path : cookie가 설정된 경로를 정의

 

2. Sticky Route (클라이언트 쿠키 기반)

첫번째 요청을 받을 때 쿠키나 uri를 기준으로 클라이언트에 route 할당

모든 후속 요청은 쿠키 또는 요청 uri의 route 매개 변수를 비교하여 서버를 식별, 해당 경로의 요청대로 분기

upstream backend {
    server backend1.example.com route=a;
    server backend2.example.com route=b;
    sticky route $route_cookie $route_uri;
}

 

3. Sticky Learn (서버 Session ID 기반)

요청 및 응답을 검사하여 session id를 먼저 찾고 nginx 서버의 공유 메모리에 저장된 Session ID 인지 여부를 판단하고 보냄

어떤 upstream 서버가 어떤 session id에 해당하는지 학습
session id는 HTTP cookie에 전달되고 요청에 이미 학습된 session id가 포함된 경우 해당 서버로 요청 전달
클라이언트 측에 쿠키를 보관할 필요가 없으므로 이전 두가지 방법보다 더 효과적인 session 지속성을 유지할 수 있는 방법

upstream backend {
   server backend1.example.com;
   server backend2.example.com;
   sticky learn
       create=$remote_addr$uri
       lookup=$remote_addr$uri
       zone=client_sessions:1m;
       timeout=1h;
}

 

create : 새 세션이 생성되는 방법을 나타내는 변수를 지정

위의 예시에서는 $remote_addr$uri 를 사용하여 ip 주소와 uri를 결합한 값을 세션 식별자로 지정
lookup : 기존 세션을 검색하는 방법을 지정. create와 같은 값을 사용하는 것이 일반적
zone : 모든 sticky session에 대한 정보가 보관되는 공유 메모리 영역을 지정

client_sessions:1m은 1mb의 공유 메모리 영역을 설정하는 것

'WEB > NGINX' 카테고리의 다른 글

8. Nginx 모듈  (4) 2024.11.19
7. weblogic 연동  (0) 2024.11.19
5. Load Balancing 방식 및 가중치 설정  (0) 2024.11.07
4. tomcat 연동  (0) 2023.05.22
3. 기동/중지  (0) 2023.05.22