Classic Load Balancer 문제 해결: HTTP 오류 - ELB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Classic Load Balancer 문제 해결: HTTP 오류

HTTP 메서드(동사라고도 불림)는 HTTP 요청을 수신하는 리소스에서 수행할 작업을 지정합니다. HTTP 요청에 대한 표준 메서드는 RFC 2616 Method Definitions에 정의되어 있습니다. 표준 메서드에는 GET, POST, PUT, HEAD 및 OPTIONS가 포함됩니다. 일부 웹 애플리케이션은 HTTP/1.1 메서드의 확장 메서드를 필요로 하며 때에 따라 이를 적용합니다. HTTP 확장 메서드의 일반적인 예에는 PATCH, REPORT, MKCOL, PROPFIND, MOVE 및 LOCK이 포함됩니다. ELB는 모든 표준 및 비표준 HTTP 메서드를 허용합니다.

HTTP 요청 및 응답은 헤더 필드를 사용하여 HTTP 메시지에 대한 정보를 보냅니다. 헤더 필드는 콜론으로 구분된 이름-값 페어이며 CR(캐리지 리턴) 및 LF(줄 바꿈)로 구분됩니다. HTTP 헤더 필드의 표준 집합은 RFC 2616 Message Headers에 정의되어 있습니다. 자세한 내용은 HTTP 헤더 및 Classic Load Balancer 단원을 참조하십시오.

로드 밸런서는 HTTP 요청을 받으면 잘못된 형식의 요청 및 메서드 길이를 확인합니다. 로드 밸런서에 대한 HTTP 요청의 전체 메소드 길이는 127자를 초과할 수 없습니다. HTTP 요청이 두 가지 확인을 모두 통과하면 로드 밸런서는 요청을 EC2 인스턴스로 전송합니다. 요청의 메소드 필드가 잘못된 형식인 경우 로드 밸런서는 HTTP 400: BAD_REQUEST 오류로 응답합니다. 요청의 메소드 길이가 127자를 초과하는 경우 로드 밸런서는 HTTP 405: METHOD_NOT_ALLOWED 오류로 응답합니다.

EC2 인스턴스는 요청에 메소드를 구현하고 응답을 클라이언트에 다시 전송하는 방식으로 유효한 요청을 처리합니다. 인스턴스는 지원되는 메소드와 지원되지 않는 메소드를 모두 처리하도록 구성되어야 합니다.

다음은 로드 밸런서, 잠재적인 원인 및 문제를 해결하기 위해 수행할 수 있는 단계에서 반환되는 오류 메시지입니다.

HTTP 400: BAD_REQUEST

설명: 클라이언트가 잘못된 요청을 전송했다는 것을 나타냅니다.

원인 1: 클라이언트가 HTTP 사양을 충족하지 않는 잘못된 형식의 요청을 전송했습니다. 예를 들어 요청에 URL 공백이 없어야 합니다.

원인 2: 클라이언트가 ELB에서 지원하지 않는 HTTP CONNECT 메서드를 사용했습니다.

솔루션: 인스턴스에 직접 연결하고 클라이언트 요청의 세부 사항을 캡처합니다. 잘못된 형식의 요청에 대해 헤더와 URL을 검토합니다. 요청이 HTTP 사양에 부합하는지 확인합니다. HTTP CONNECT를 사용하지 않는지 확인하십시오.

HTTP 405: METHOD_NOT_ALLOWED

설명: 메서드 길이가 잘못되었다는 것을 나타냅니다.

원인: 요청 헤더의 메서드 길이가 127자를 초과합니다.

솔루션: 메서드 길이를 확인합니다.

HTTP 408: 요청 제한 시간

설명: 클라이언트가 요청을 취소했거나 전체 요청을 전송하지 못했다는 것을 나타냅니다.

원인 1: 네트워크 중단 또는 부분적으로 형성된 헤더 같은 잘못된 요청, 지정된 콘텐츠 크기가 전송된 실제 콘텐츠 크기와 일치하지 않는 상황 등이 있습니다.

솔루션 1: 요청을 하는 코드를 검사하고, 실제 요청을 검사할 수 있는 권한을 가진 등록된 인스턴스(또는 개발/테스트 환경)로 직접 보내 봅니다.

원인 2: 클라이언트에 대한 연결이 종료되었습니다(로드 밸런서가 응답을 보낼 수 없음).

솔루션 2: 요청을 하는 머신에서 패킷 스니퍼를 사용하여 응답을 보내기 전에 클라이언트가 연결을 종료하지 않는지 확인합니다.

HTTP 502: 잘못된 게이트웨이

설명: 로드 밸런서가 등록된 인스턴스에서 보낸 응답을 구문 분석할 수 없다는 것을 나타냅니다.

원인: 인스턴스의 응답이 잘못된 형식이거나 로드 밸런서의 문제일 수 있습니다.

솔루션: 인스턴스에서 보낸 응답이 HTTP 사양을 준수하는지 확인합니다. AWS Support 센터로 이동하여 지원을 요청합니다.

HTTP 503: 서비스 사용 불가

설명: 로드 밸런서 또는 등록된 인스턴스가 오류의 원인이라는 것을 나타냅니다.

원인 1: 요청을 처리할 로드 밸런서의 용량이 부족합니다.

솔루션 1: 이는 일시적인 문제여야 하며 몇 분 이상 지속되어서는 안 됩니다. 문제가 계속되면 AWS Support 센터로 이동하여 지원을 요청합니다.

원인 2: 등록된 인스턴스가 없습니다.

솔루션 2: 로드 밸런서가 응답하도록 구성된 모든 가용 영역에 인스턴스를 하나 이상 등록합니다. CloudWatch의 HealthyHostCount 지표를 보고 확인합니다. 인스턴스가 각 가용 영역에 등록되어 있는지 확인할 수 없는 경우 교차 영역 로드 밸런싱을 활성화하는 것이 좋습니다. 자세한 내용은 Classic Load Balancer에서 교차 영역 로드 밸런성을 구성 단원을 참조하십시오.

원인 3: 정상적인 인스턴스가 없습니다.

솔루션 3: 로드 밸런서가 응답하도록 구성된 모든 가용 영역에 정상적인 인스턴스가 있는지 확인합니다. HealthyHostCount 지표를 보고 확인합니다.

원인 4: 서지 대기열이 가득 찼습니다.

원인 4: 인스턴스에 요청 빈도를 처리할 충분한 용량이 있는지 확인합니다. SpilloverCount 지표를 보고 확인합니다.

HTTP 504: 게이트웨이 제한 시간

설명: 유휴 제한 시간 내에 요청이 완료되지 않았기 때문에 로드 밸런서가 연결을 종료했다는 것을 나타냅니다.

원인 1: 애플리케이션은 구성된 유휴 제한 시간보다 응답하는 데 더 오래 걸립니다.

솔루션 1: HTTPCode_ELB_5XXLatency 지표를 모니터링합니다. 이러한 지표가 증가하면 유휴 제한 시간 내에 애플리케이션이 응답하지 않을 수 있습니다. 제한 시간이 초과된 요청에 대한 자세한 내용은 로드 밸런서에서 액세스 로그를 활성화하고 ELB에서 생성한 로그의 504 응답 코드를 검토하세요. 필요한 경우 용량을 늘리거나 구성된 유휴 제한 시간을 늘려 오래 걸리는 작업(예: 대용량 파일 업로드)을 완료할 수 있습니다. 자세한 내용은 Classic Load Balancer에 대한 유휴 연결 제한 시간 구성ELB 긴 지연 시간 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

원인 2: 등록된 인스턴스가 ELB에 대한 연결을 종료합니다.

솔루션 2: EC2 인스턴스에서 연결 유지 설정을 활성화하고 연결 유지 제한 시간이 로드 밸런서의 유휴 제한 시간 설정보다 큰지 확인합니다.