쿠키가 비 지속성로드 밸런서에서 작동하는 방식


7

sso를 사용하여 사용자를 로그인하는 Drupal 애플리케이션이 있습니다.

우리는 AWS 클래식로드 밸런서 (ELB)를 사용하고 있으며 AWS는 ELB에 세션 지속성이 없다고 말합니다.

내가 알아 내려고하는 것은 쿠키가 클래식로드 밸런서에서 비 지속성으로 작동하는 방법입니다.

example.com DNS는 ELB를 가리 킵니다. 풀 Server1 및 Server2에 2 개의 서버가 있습니다.

우리가하고 싶은 것은 사용자가 http://example.com/user/12345/서버 1 에서 예 를 들어 로그인하지 않은 경우 홈 페이지를 방문 하면 이미 sso 페이지로 리디렉션되고 http://example.com/user/login/sso자동으로 로그인되어 쿠키를 얻은 SESS<hexnumber>다음 다시 리디렉션됩니다http://example.com/user/12345/

우리는 세션 서버 (redis)를 추가 할 수 없으며 두 리디렉션 모두에 대해 서버 1에 머무를 것이라는 보장입니다.

'example.com'을 칠 때마다 사용자는 서버 1 또는 서버 2로 끝날 수 있습니다.

내 질문:

쿠키가 server1에서 쿠키를 가져 와서 server2로 리디렉션되면 server2는 쿠키가 server1의 해당 사용자에게 이미 할당되어 있음을 어떻게 알 수 있습니까?

나는 원 안에 자신을 생각하고있는 것 같습니다. 세션 지속성이없는 LB를 사용하여 과거에 이러한 유형의 설정 작업을 할 때 Redis 서버를 사용하여 세션을 유지했으며 각 요청은 세션 정보에 대한 redis 서버를 확인했습니다.

답변:


3

쿠키는 서버가 아닌 브라우저에서 설정됩니다. 도메인으로 제한되며, 선택적으로 URL의 특정 경로로 제한되므로 두 서버 모두 동일한 도메인에서 액세스하는 경우 쿠키가 존재합니다.

쿠키가 세션을 가리키는 경우 server1과 server2가 어떤 방식 으로든 해당 세션에 액세스 할 수 있어야합니다. 서버간에 세션을 공유 할 수없는 경우 사용자가 특정 서버를 유지하도록해야합니다. 이것은 DNS와 약간의 URL 재 작성 마술로 쉽게 달성 할 수 있습니다.

  • www.example.com은 두 서버를 모두 가리 킵니다.
  • www1.example.com은 server1 만 가리킴
  • www2.example.com은 server2 만 가리킴

단순 (ish) 재 작성 규칙과 쿠키 세트를 사용하여 사용자는 특정 서버에 고정되어 세션이 지속되도록 할 수 있습니다.

자세한 내용은 다음과 같습니다.

DNS :

  • example.com A 1.1.1.1, A 2.2.2.2
  • www.example.com CNAME example.com
  • www1.example.com A 1.1.1.1
  • www2.example.com A 2.2.2.2

다시 쓰기 규칙 :

  • 지속성 쿠키 : "백엔드"
  • 초기 연결 : "백엔드"가 정의되지 않은 경우 응답 한 서버에 따라 "백엔드"를 www1 또는 www2로 설정하고 해당 서버로 리디렉션하십시오. 쿠키는 도메인 "example.com"으로 설정해야합니다. 이렇게하면 www1과 www2에 모두로드됩니다.
  • "백엔드"가 정의 된 경우 해당 값이 서버 인스턴스와 일치하는지 확인하고 필요한 경우 경로 재 지정하십시오.
  • 세션 쿠키가 서버의 전체 도메인 이름 (www1.example.com 또는 www2.example.com)에 정의되어 있는지 확인하십시오.

다시 쓰기 논리는 웹 서버 자체에서 정의됩니다. 모든 최신 웹 서버에는이 기능을 완전히 구현할 수있는 매우 뛰어난 재 작성 언어가 있습니다.


나는 example1.com과 example2.com에 대해 생각했지만 사용자에게 example1.com 또는 example2.com을 사용해야한다고 말할 수는 없습니다. 쿠키와 브라우저의 작동 방식에 대한 명확한 이해없이 생각했습니다. 어떤 종류의 백엔드 마술을 만드는 얼굴을 구하기 위해. 어떻게 사용할 수있는 example.com사용자가 쿠키를 얻는 경우에 다음 www1.example.com 또는 www2.example.com에 그들을 계속?
Donna Delour

내 답변을 업데이트

0

Elasticache Redis와 같은 세션 관리 데이터베이스를 사용할 수없는 경우 (단지 세션에 대한 Redis는 한 달에 15 달러를 초과하지 않아야 함) ELB에서 고정 세션을 활성화하는 것이 가장 좋습니다.

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html

이렇게하면 사용자가 세션 전체에서 동일한 백엔드 노드로 이동하게됩니다. 수명이 900 초인 "로드 밸런서 생성 쿠키"는 충분해야하지만이를 조정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.