Application Load Balancer HTTP 502 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Application Load Balancer에서 HTTP 502 오류가 발생했습니다.

간략한 설명

HTTP 502: bad gateway 오류에는 여러 가지 원인이 있을 수 있으며, 그 원인은 대상 또는 Application Load Balancer일 수 있습니다. 오류의 원인을 확인하려면 Amazon CloudWatch 지표액세스 로그를 사용하세요.

Application Load Balancer에서 오류 문제를 해결하기 전에 액세스 로그를 활성화했는지 확인하세요. 액세스 로그에서 각 필드의 의미를 이해하려면 액세스 로그 항목을 참조하세요.

대상이 AWS Lambda 함수인 경우 해결 방법 섹션에서 대상이 Lambda 함수일 때 HTTP 502 오류 문제 해결을 참조하세요.

해결 방법

HTTP 502 오류 원인 찾기

CloudWatch 지표 사용

데이터 포인트가 HTTPCode_ELB_502_Count 지표 아래에 나타나면 로드 밸런서가 HTTP 502 오류의 원인입니다. HTTPCode_Target_5XX_Count 지표 아래에 나타나면 대상이 원인입니다.

액세스 로그 사용

elb_status_code가 "502"이고, target_status_code가 "-"인 경우, 로드 밸런서가 HTTP 502 오류의 원인입니다. elb_status_code가 "502"이고 target_status_code가 "502"인 경우, 타겟이 오류의 원인입니다.

HTTP 502 오류 문제 해결

**참고:**elb_status_code = "502"target_status_code로 액세스 로그를 필터링하면 원인을 파악하는 데 도움이 됩니다. 그런 다음 사용 사례에 맞는 관련 단계를 완료합니다.

로드 밸런서가 연결을 설정하려고 할 때 대상으로부터 TCP RST를 수신

연결을 설정할 때 대상에서 TCP RST를 수신하면 로드 밸런서가 대상과 TCP 3방향 핸드셰이크를 설정할 수 없습니다. 따라서 로드 밸런서가 사용자 요청을 대상에 전달할 수 없습니다.

  • TargetConnectionErrorCount 지표에 대한 데이터 포인트가 있는지 확인합니다. 이 지표는 로드 밸런서와 대상 간에 성공적으로 설정되지 않은 연결 수를 나타냅니다.
  • 액세스 로그의 request_processing_time, target_processing_time, response_processing_time 필드가 각각 -1 값으로 설정되어 있는지 확인합니다. 이 값은 로드 밸런서가 성공적인 연결이 필요하기 때문에 요청을 대상에 전달할 수 없음을 의미합니다.

다음은 액세스 로그 항목의 예입니다.

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 -1 -1 -1 502 - 86 155 "GET http://example.com:80/ HTTP/1.1"
"curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" Root=1-58337262-36d228ad5d99923122bbe354"

참고: 이 접속 로그 항목에서 request_processing_time, target_processing_timeresponse_processing_time 항목은 각각 -1로 설정되어 있습니다.

연결을 설정하려고 할 때 로드 밸런서가 대상으로부터 ‘ICMP Destination unreachable(Host unreachable)’과 같은 예기치 않은 응답을 수신함

  • 접속 로그의 request_processing_time, target_processing_time, response_processing_time 항목이 모두 -1 값으로 설정되어 있는지 확인합니다.
  • 로드 밸런서 서브넷에서 대상 포트의 대상에 대한 트래픽이 허용되는지 확인합니다.

대상은 TCP RST 또는 TCP FIN과의 연결을 닫았지만 로드 밸런서에는 대상에 대해 처리되지 않은 요청이 있음

로드 밸런서가 요청을 수신하여 대상에 전달합니다. 대상은 요청을 수신하고 처리를 시작하지만, 로드 밸런서에 대한 연결이 너무 일찍 닫혔습니다. 이는 일반적으로 대상의 연결 유지 제한 시간이 로드 밸런서의 유휴 제한 시간 값보다 짧을 때 발생합니다. 연결 유지 제한 시간유휴 제한 시간 값보다 큰지 확인합니다.

request_processing_time, target_processing_time, response_processing_time 항목의 값을 확인합니다.

다음 액세스 로그 항목 예시를 참조하세요.

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.001 4.205 -1 502 - 94 326 "GET http://example.com:80 HTTP/1.1" "curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337262-36d228ad5d99923122bbe354"

참고: 이 접속 로그 항목에서 request_processing_time0.001, target_processing_time4.205, response_processing_time-1입니다.

대상 응답의 형식이 잘못되었거나 유효하지 않은 HTTP 헤더가 포함되어 있음

문제가 발생한 기간 동안 대상에서 패킷 캡처를 수행하여 대상 응답을 파악하세요.

로드 밸런서가 대상에 연결할 때 SSL 핸드셰이크 오류 또는 SSL 핸드셰이크 시간 초과(10초) 발생

로드 밸런서에서 대상의 HTTPS 수신기로의 TCP 연결은 성공했지만 후속 SSL 핸드셰이크 시간이 초과되었습니다. 그 결과 로드 밸런서가 요청을 대상으로 전달할 수 없습니다.

대상 그룹이 HTTPS 프로토콜을 사용하는지 확인합니다. HTTPS 프로토콜을 사용하지 않는다면 SSL 핸드셰이크 시간 초과가 문제의 원인이 아닙니다. 대상 그룹이 HTTPS 프로토콜을 사용하는 경우 다음 사항을 확인하세요.

  • 접속 로그의 request_processing_time, target_processing_time, response_processing_time 항목이 모두 -1 값으로 설정되어 있는지 확인합니다.
  • TargetTLSNegotiationErrorCount 지표에 대한 데이터 포인트가 있는지 확인합니다.
  • 문제가 발생한 기간에 대상에서 패킷 캡처를 수행하여 SSL 핸드셰이크와 관련된 문제인지 확인합니다. 그렇다면 패킷 캡처 수행 섹션의 단계를 완료하세요.
  • 암호 또는 프로토콜이 일치하지 않는지 확인합니다.

등록 취소된 대상에서 처리하는 요청에 대해 등록 취소 지연 기간이 경과됨

CloudTrail 이벤트에서 문제가 발생한 기간 동안 DeregisterTargets 작업을 사용한 API 호출이 있는지 확인하세요. 문제가 발생한 기간 동안 DeregisterTargets를 사용한 API 호출이 발생한 경우, 너무 일찍 등록 취소된 타깃으로 인해 오류가 발생한 것입니다. 이 문제를 해결하려면 등록 해제 지연 기간을 늘려 긴 작업이 실패 없이 완료될 수 있도록 합니다.

대상이 Lambda 함수인 경우 HTTP 502 오류 문제 해결

참고: 실패한 Lambda 함수에 대한 요청의 경우 로드 밸런서는 Lambda 관련 오류 이유 코드를 액세스 로그의 error_reason 필드에 저장합니다.

타겟이 Lambda 함수이고 응답 본문이 1MB를 초과

  • LambdaUserError 지표에 대한 데이터 포인트가 있는지 확인합니다.
  • 로드 밸런서 접속 로그의 error_reason 항목이 LambdaResponseTooLarge로 설정되어 있는지 확인합니다.

대상인 Lambda 함수가 구성된 제한 시간에 도달하기 전에 응답하지 않음

  • Lambda 함수 제한 시간 구성을 확인합니다.
  • LambdaUserError 지표에 대한 데이터 포인트가 있는지 확인합니다.
  • 로드 밸런서 접속 로그의 error_reason 항목이 LambdaUnhandled로 설정되어 있는지 확인합니다.

대상이 오류를 반환한 Lambda 함수이거나, 함수가 Lambda 서비스에 의해 조절되었음

서비스 제한에 대한 지침은 AWS Support에 문의하세요.

패킷 캡처 수행

Linux의 경우 다음 명령을 사용합니다.

sudo tcpdump -i any -w filename.pcap

Microsoft Windows의 경우, Wireshark 애플리케이션을 다운로드하여 사용합니다(Wireshark 웹사이트에서).

자세한 내용은 VPC의 EC2 Linux 또는 Windows 인스턴스와 인터넷 게이트웨이를 통한 온프레미스 호스트 간의 네트워크 성능 문제를 해결하려면 어떻게 해야 하나요? tcpdump를 사용한 패킷 캡처 샘플 테스트패킷 캡처 섹션을 참조하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전