기간 기반 또는 애플리케이션 제어 세션 고정성 기능이 있는 Classic Load Balancer를 사용하고 있습니다. 이 로드 밸런서는 클라이언트 HTTP 또는 HTTPS 세션을 동일한 등록된 인스턴스로 라우팅하도록 구성되었지만 클라이언트 요청이 다른 등록된 인스턴스로 라우팅됩니다. ELB(Elastic Load Balancing) 세션 고정성 문제를 해결하려면 어떻게 해야 합니까?

기본적으로 Classic Load Balancer는 미해결 요청 수가 가장 작은 등록된 인스턴스로 각 요청을 라우팅합니다. 고정 세션(세선 선호도)을 사용하면 사용자 세션을 특정 인스턴스에 바인딩하도록 로드 밸런서가 구성되므로 세션 중의 모든 사용자 요청이 동일한 인스턴스로 전송됩니다. 다음의 경우 고정 세션이 실패할 수 있습니다.

1.    등록된 인스턴스가 애플리케이션 쿠키를 삽입하지 않습니다.

2.    클라이언트가 요청 헤더의 쿠키를 반환하지 않습니다.

3.    등록된 인스턴스가 삽입한 쿠키의 형식이 잘못되었습니다.

4.    기간 기반 고정 세션을 사용할 때 지정된 만료 기간이 지났습니다.

5.    HTTP 또는 HTTPS 요청이 고정성이 활성화된 둘 이상의 로드 밸런서를 통과합니다.

참고: 로드 밸런서 세션 고정성 기능은 HTTP 또는 HTTPS 리스너를 통해서만 지원됩니다.

애플리케이션 제어 세션 고정

1.    Classic Load Balancer에 HTTP 오류가 있는지 확인합니다. 자세한 내용은 Classic Load Balancer 문제 해결: HTTP 오류 단원을 참조하십시오.

2.    로드 밸런서 DNS 이름에 다음과 유사한 명령을 실행합니다. 응답에서 다음 두 쿠키를 확인합니다.

  • 백엔드 인스턴스에서 실행되는 애플리케이션이 애플리케이션 쿠키를 삽입했습니다.
  • 로드 밸런서가 AWSELB 쿠키를 삽입했습니다.

참고: 이 명령을 실행하기 전에 DNS 이름을 로드 밸런서의 이름으로 바꿔야 합니다.  

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null internal-TESTELB-1430759361.eu-central-1.elb.amazonaws.com

참고: curl 유틸리티는 Linux의 기본 유틸리티이지만 Windows에도 설치될 수 있습니다.

다음은 명령에 대한 예제 응답입니다.

...

< Set-Cookie: PHPSESSID=k0qu6t4e35i4lgmsk78mj9k4a4; path=/
< Set-Cookie: 
AWSELB=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/

...

참고: 응답에 AWSELB 쿠키가 없는 경우 클라이언트와 백엔드 인스턴스 간에 고정성이 없는 것입니다.

3.    등록된 인스턴스가 HTTP 요청을 등록된 인스턴스로 직접 전송하여 애플리케이션 쿠키를 삽입하는지 확인합니다. 다음과 유사한 명령을 실행하십시오.

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null 172.31.30.168

이 명령은 다음 예제와 유사한 응답을 반환합니다.

...

< Set-Cookie: PHPSESSID=5pq74110nuir60kpapj04mglg4; path=/

...

4.    등록된 인스턴스가 생성한 쿠키 이름이 로드 밸런서에 구성된 쿠키 이름과 동일한지 확인합니다.

5.    등록된 인스턴스가 애플리케이션 쿠키를 응답에 삽입하고 로드 밸런서가 AWSELB 쿠키를 삽입하는 경우 클라이언트가 후속 요청에서 이 두 쿠키를 전송하는지 확인하십시오. 클라이언트가 애플리케이션 쿠키 또는 AWSELB 쿠키를 포함하지 않으면 고정성이 작동하지 않습니다. 클라이언트가 애플리케이션 쿠키와 AWSELB 쿠키를 모두 전송하는지 확인하려면 클라이언트에서 패킷 캡쳐를 수행하거나 브라우저의 웹 디버깅 도구를 사용하여 요청 헤더의 쿠키 정보를 검색합니다.

6.    로드 밸런서가 요청을 라우팅한 백엔드 인스턴스를 확인하려면 다음과 유사한 명령을 실행하여 백엔드 인스턴스가 인스턴스 메타데이터를 사용하여 인스턴스 ID를 표시하도록 구성합니다.

<?php $instance_id =file_get_contents('http://169.254.169.254/latest/meta-data/instance-id');
echo "instance id = " . $instance_id . "\\xA";
?> 

7.    ELB 액세스 로그를 검토하여 동일한 사용자의 요청이 다른 등록된 인스턴스로 라우팅되었는지 확인합니다. ELB 액세스 로그 검토에 대한 자세한 내용은 Classic Load Balancer 액세스 로그 단원을 참조하십시오.

8.    애플리케이션이 삽입한 쿠키가 HTTP에 대해 올바른 형식인지 확인합니다.

9.    요청이 여러 로드 밸런서를 통과하는 경우 하나의 로드 밸런서에만 고정성이 활성화되었는지 확인합니다. 둘 이상의 로드 밸런서가 쿠키를 삽입하면 원래 쿠키가 바뀌고 고정성이 실패합니다.

기간 기반 세션 고정성

1.    로드 밸런서 DNS 이름에 다음과 유사한 명령을 실행하여 응답에 AWSELB 쿠키가 있는지 확인합니다.  

[ec2-user@ip-172-31-22-85 ~]$ curl -vko /dev/null internal-TESTELB-1430759361.eu-central-1.elb.amazonaws.com

이 명령은 다음 예제와 유사한 응답을 반환합니다.

...

< Set-Cookie: 
AWSELB=438DC7A50C516D797550CF7DE2A7DBA19D6816D5E6FB20329CD6AEF2B40030B12FF2839757A60E2330136A2182D27D049FB9D887FBFE9E80FB0724130FB3A86A4B0BAC296FDEB9E943EC9272FF52F5A8AEF373DF33;PATH=/

...

참고: 응답에 AWSELB 쿠키가 없는 경우 클라이언트와 백엔드 인스턴스 간에 고정성이 없는 것입니다.

2.    로드 밸런서가 AWSELB 쿠키를 삽입하는 경우 클라이언트가 후속 요청에서 이 쿠키를 전송하는지 확인합니다. 클라이언트가 AWSELB 쿠키를 포함하지 않으면 고정성이 작동하지 않습니다. 클라이언트가 AWSELB 쿠키를 모두 전송하는지 확인하려면 클라이언트에서 패킷 캡쳐를 수행하거나 브라우저의 웹 디버깅 도구를 사용하여 요청 헤더의 쿠키 정보를 검색합니다.

3.    로드 밸런서에 구성된 기간을 확인합니다. 쿠키 만료 기간이 경과한 경우 로드 밸런서가 새 쿠키를 발급하기 전까지 클라이언트 세션이 등록된 인스턴스에 고정되지 않습니다.

4.    요청이 여러 로드 밸런서를 통과하는 경우 하나의 로드 밸런서에만 고정성이 활성화되었는지 확인합니다. 둘 이상의 로드 밸런서가 쿠키를 삽입하면 원래 쿠키가 바뀌고 고정성이 실패합니다.  


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2018년 3월 30일