Application Load Balancer를 사용할 때 반환되는 504 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 4월 25일

Application Load Balancer 액세스 로그, Amazon CloudWatch 지표 또는 Application Load Balancer를 통해 내 서비스에 연결할 때 HTTP 504 오류가 표시됩니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

HTTP 504 오류는 게이트웨이 또는 프록시가 시간 초과되었음을 나타내는 HTTP 상태 코드입니다.

다음 경우에 Application Load Balancer HTTP 504 오류가 발생할 수 있습니다.

  • 연결 제한 시간(10초)이 만료되기 전에 로드 밸런서가 타겟에 연결을 설정하지 못했습니다.
  • 로드 밸런서가 대상에 대한 연결을 설정했지만 유휴 제한 시간이 경과하기 전에 대상이 응답하지 않았습니다.
  • 서브넷에 대한 네트워크 ACL은 대상에서 휘발성 포트(1024-65535)의 로드 밸런서 노드로의 트래픽을 허용하지 않았습니다.
  • 대상은 엔터티 본문보다 큰 Content-Length 헤더 값을 반환합니다. 로드 밸런서가 누락된 바이트를 기다리는 동안 시간이 초과되었습니다.
  • 대상이 AWS Lambda 함수이고 연결 제한 시간이 만료되기 전에 서비스가 응답하지 않았습니다.

해결 방법

로드 밸런서의 유휴 제한 시간을 확인하고 필요한 경우 수정

백엔드 인스턴스가 구성된 유휴 제한 시간 내에 요청에 응답하지 않으면 로드 밸런서 HTTP 504 오류가 발생할 수 있습니다. 기본적으로 Application Load Balancer의 유휴 제한 시간은 60초입니다.

CloudWatch 지표가 활성화된 경우 Application Load Balancer에 대한 CloudWatch 지표를 확인하십시오. HTTPCode_ELB_5xx 지표는 로드 밸런서에서 발생한 504 오류를 나타냅니다. HttpCode_ELB_504_count 지표 데이터포인트가 없는 경우 로드 밸런서가 아닌 애플리케이션 서버에서 504 오류를 반환합니다.

CloudWatch 지표TargetResponseTime에 대한 최대값과 평균값을 확인합니다. 제한 시간 값은 대상으로부터 로드 밸런서 요청을 받은 후 경과된 시간을 나타낼 수 있습니다.

이를 해결하려면 다음을 수행하세요.

HTTP 요청이 유휴 제한 시간 내에 완료되도록 로드 밸런서의 유휴 제한 시간을 수정합니다.

또는

HTTP 요청에 더 빠르게 응답하도록 애플리케이션을 수정합니다. 애플리케이션이 응답하는 데 구성된 유휴 제한 시간보다 오래 걸리지 않는지 확인합니다.

(선택 사항) 백엔드 웹 서버 애플리케이션 로그에 다음 사용자 지정 필터를 추가하여 느린 응답 시간의 원인을 파악합니다.

Apache 웹 서버

a- Apache : %D in log format
b- Nginx: $request_time and $upstream_response_timein log format
c- IIS: “time-taken” in log format
d- Apache Tomcat Access logs: %D in log format

로드 밸런서가 등록된 대상이 있는 트래픽을 허용하는지 확인함

로드 밸런서 및 백엔드 대상과 연결된 네트워크 보안 그룹이 트래픽 및 상태 확인 포트에서 양방향으로 서로 들어오는 트래픽을 허용하는지 확인합니다. 서브넷에 대한 네트워크 ACL이 대상에서 휘발성 포트(1024-65535)의 로드 밸런서 노드로의 트래픽을 허용하는지 확인합니다.

참고: Application Load Balancer에 다음 보안 그룹 규칙을 사용하는 것이 좋습니다.

합계 통계와 함께 CloudWatch 지표 TargetConnectionErrorCount를 검토하면 양수 데이터포인트가 표시될 가능성이 높습니다. 예를 들어 로드 밸런서와 대상 간에 성공적으로 설정되지 않은 연결 개수가 표시됩니다.

자세한 내용은 로드 밸런서의 유휴 제한 시간 설정 구성하기을 참조하세요.

연결 제한 시간이 만료되기 전에 Lambda 함수가 응답하는지 확인하기

대상이 Lambda 함수인 경우 최대 통계로 성능 지표 기간을 확인하여 이벤트가 처리되는 시간을 확인합니다. 자세한 내용은 성능 지표 사용하기를 참조하십시오.