HTTP 502 상태 코드(잘못된 게이트웨이) - Amazon CloudFront

HTTP 502 상태 코드(잘못된 게이트웨이)

CloudFront는 오리진 서버에 연결할 수 없기 때문에 요청된 객체를 제공할 수 없을 때 HTTP 502 상태 코드(잘못된 게이트웨이)를 반환합니다.

Lambda@Edge를 사용하는 경우 Lambda 검증 오류가 문제일 수 있습니다. NonS3OriginDnsError 오류 코드와 함께 HTTP 502 오류가 발생하는 경우 CloudFront가 오리진에 연결할 수 없는 DNS 구성 문제가 있을 가능성이 있습니다.

CloudFront와 사용자 지정 원본 서버 간의 SSL/TLS 협상 실패

CloudFront와 오리진 사이에 HTTPS가 위치하도록 요구하는 사용자 지정 오리진을 사용하는 경우, 도메인 이름 불일치로 인해 오류가 발생할 수 있습니다. 오리진의 SSL/TLS 인증서에는 CloudFront 배포용으로 지정한 오리진 도메인 또는 오리진 요청의 Host 헤더와 일치하는 도메인 이름이 포함되어야 합니다.

도메인 이름이 일치하지 않으면 SSL/TLS 핸드쉐이크가 실패하고, CloudFront는 HTTP 상태 코드 502(잘못된 게이트웨이)를 반환하고 X-Cache 헤더를 Error from cloudfront로 설정합니다.

온라인 SSL 확인 프로그램 또는 OpenSSL을 사용하여 인증서의 도메인 이름이 배포의 오리진 도메인 또는 Host 헤더와 일치하는지 여부를 파악할 수 있습니다. 도메인 이름이 일치하지 않는 경우, 다음 두 가지 옵션이 있습니다.

  • 해당하는 도메인 이름이 포함된 새 SSL/TLS 인증서를 받습니다.

    AWS Certificate Manager(ACM)를 사용하는 경우 새 인증서를 요청하려면 AWS Certificate Manager 사용 설명서에서 퍼블릭 인증서 요청을 참조하세요.

  • CloudFront가 더 이상 SSL을 사용하여 오리진 연결을 시도하지 않도록 배포 구성을 변경합니다.

온라인 SSL 확인 프로그램

SSL 테스트 도구를 찾으려면 인터넷에서 "online ssl checker"를 검색합니다. 일반적으로, 도메인 이름을 지정하면 SSL/TLS 인증서에 대한 다양한 정보가 도구에 표시됩니다. 인증서의 일반 이름 또는 주제 대체 이름 필드에 도메인 이름이 나와 있는지 확인합니다.

OpenSSL

CloudFront에서 HTTP 502 오류를 해결하기 위해 OpenSSL을 사용하여 오리진 서버에 SSL/TLS 연결을 시도할 수 있습니다. OpenSSL을 연결할 수 없는 경우 이는 오리진 서버의 SSL/TLS 구성에 문제가 있음을 나타낼 수 있습니다. OpenSSL을 연결할 수 있는 경우 인증서의 일반 이름(Subject CN 필드) 및 주체 대체 이름(Subject Alternative Name 필드)을 포함하여 오리진 서버의 인증서에 대한 정보를 반환합니다.

다음 OpenSSL 명령을 사용하여 오리진 서버에 대한 연결을 테스트합니다(origin domain을 example.com과 같은 오리진 서버의 도메인 이름으로 변경).

openssl s_client -connect origin domain name:443

다음이 참인 경우:

  • 오리진 서버는 여러 SSL/TLS 인증서를 사용하여 여러 도메인 이름을 지원합니다.

  • 배포가 Host 헤더를 오리진에 전달하도록 구성되어 있습니다.

이후 다음 예제와 같이 OpenSSL 명령에 -servername 옵션을 추가합니다(CNAME을 배포에 구성된 CNAME으로 변경).

openssl s_client -connect origin domain name:443 -servername CNAME

오리진이 지원되는 암호화/프로토콜에 응답하지 않음

CloudFront는 암호화 및 프로토콜을 사용하여 오리진 서버에 연결합니다. CloudFront에서 지원하는 암호화 및 프로토콜 목록은 CloudFront와 오리진 간에 지원되는 프로토콜 및 암호 섹션을 참조하세요. 오리진이 SSL/TLS 교환에서 이러한 암호화 또는 프로토콜 중 하나에 응답하지 않는 경우, CloudFront가 연결되지 않은 것입니다. SSL Labs와 같은 온라인 도구를 사용하면, 오리진에서 암호화 및 프로토콜을 지원하는지 확인할 수 있습니다. 호스트 이름 필드에 오리진의 도메인 이름을 입력한 다음 제출을 선택합니다. 테스트에서 일반 이름대체 이름 필드를 검토하여 오리진의 도메인 이름과 일치하는지 확인합니다. 테스트가 완료되면 테스트 결과에서 프로토콜암호 글부 섹션을 찾아 오리진에서 암호화 또는 프로토콜을 지원하는지 확인합니다. 이를 CloudFront와 오리진 간에 지원되는 프로토콜 및 암호의 목록과 비교합니다.

오리진의 SSL/TLS 인증서가 만료되었거나 잘못되었거나 자체 서명되었거나, 인증서 체인의 순서가 잘못됨

오리진 서버에서 다음을 반환하면, CloudFront는 TCP 연결을 끊고 HTTP 상태 코드 502(잘못된 게이트웨이)를 반환하며, X-Cache 헤더를 Error from cloudfront로 설정합니다.

  • 만료된 인증서

  • 잘못된 인증서

  • 자체 서명된 인증서

  • 인증서 체인의 순서가 잘못됨

참고

중간 인증서를 포함하여 인증서의 전체 체인이 없는 경우, CloudFront는 TCP 연결을 끊습니다.

사용자 지정 원본 서버에 SSL/TLS 인증서를 설치하는 데 대한 자세한 내용은 CloudFront와 사용자 지정 오리진 간의 통신에 HTTPS 요구 섹션을 참조하세요.

오리진이 오리진 설정의 지정된 포트에서 응답하지 않음

CloudFront 배포에 오리진을 만드는 경우, CloudFront가 HTTP 및 HTTPS 트래픽을 통해 오리진에 연결하는 포트를 설정할 수 있습니다. 기본적으로 TCP 80/443이 있습니다. 이러한 포트를 수정할 수 있습니다. 오리진이 어떤 이유로 이러한 포트의 트래픽을 거부하거나 백엔드 서버가 포트에서 응답하지 않는 경우, CloudFront가 연결되지 않습니다.

이러한 문제를 해결하려면 인프라에서 실행 중인 방화벽을 확인하고, 방화벽이 지원되는 IP 범위를 차단하지 않는지 확인하십시오. 자세한 내용은 Amazon VPC 사용 설명서의 AWS IP 주소 범위를 참조하세요. 또한 웹 서버가 오리진에서 실행되는지 확인하십시오.

Lambda 검증 오류

Lambda@Edge를 사용하는 경우 HTTP 502 상태 코드는 Lambda 함수 응답이 잘못 구성되어 있거나 잘못된 내용을 포함하고 있음을 나타낼 수 있습니다. Lambda@Edge 오류 문제 해결에 대한 자세한 내용은 Lambda@Edge 함수 테스트 및 디버깅 단원을 참조하십시오.

DNS 오류(NonS3OriginDnsError)

NonS3OriginDnsError 오류 코드가 있는 HTTP 502 오류는 CloudFront가 오리진에 연결할 수 없는 DNS 구성 문제가 있음을 나타냅니다. CloudFront에서 이 오류가 발생하는 경우 오리진의 DNS 구성이 올바르고 제대로 작동하는지 확인합니다.

만료되었거나 캐시에 없는 객체에 대한 요청을 수신하면 CloudFront는 객체를 가져오기 위해 오리진에 요청합니다. 성공적으로 오리진에 요청하기 위해 CloudFront는 오리진 도메인에 대해 DNS 확인을 수행합니다. 도메인의 DNS 서비스에 문제가 있는 경우 CloudFront가 도메인 이름을 확인하여 IP 주소를 가져올 수 없어 HTTP 502 오류(NonS3OriginDnsError)가 발생합니다. 이 문제를 해결하려면 DNS 공급자에게 문의하세요. 또는 Amazon Route 53을 사용하는 경우 Route 53 DNS 서비스를 사용하는 웹 사이트에 액세스할 수 없는 이유는 무엇입니까?를 참조하세요.

이 문제를 추가로 해결하려면 오리진 루트 도메인 또는 zone apex(예: example.com)의 권한 있는 이름 서버가 올바르게 작동 중인지 확인하십시오. dig 또는 nslookup 같은 툴과 함께 다음 명령을 사용하여 apex 오리진의 이름 서버를 찾습니다

dig OriginAPEXDomainName NS +short
nslookup -query=NS OriginAPEXDomainName

이름 서버의 이름을 아는 경우 다음 명령을 사용하여 해당 이름에 대해 오리진의 도메인 이름을 쿼리하여 각각 다음 답변으로 응답하는지 확인합니다.

dig OriginDomainName @NameServer
nslookup OriginDomainName NameServer
중요

퍼블릭 인터넷에 연결된 컴퓨터를 사용하여 이 DNS 문제 해결을 수행해야 합니다. CloudFront는 인터넷의 퍼블릭 DNS를 사용하여 오리진 도메인을 확인하므로 비슷한 컨텍스트에서 문제를 해결하는 것이 중요합니다.

오리진이 루트 도메인이 아닌 다른 이름 서버에 DNS 권한이 위임된 하위 도메인인 경우, 해당 하위 도메인에 대해 이름 서버(NS) 및 권한 시작(SOA) 레코드가 올바르게 구성되었는지 확인합니다. 이전 예와 비슷한 명령을 사용하여 이러한 레코드를 확인할 수 있습니다.

DNS에 대한 자세한 내용은 Amazon Route 53 설명서의 도메인 이름 시스템(DNS) 개념을 참조하세요.

Application Load Balancer 오리진 502 오류

Application Load Balancer를 오리진으로 사용하고 502 오류가 발생하는 경우 Application Load Balancer HTTP 502 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.

API Gateway 오리진 502 오류

API Gateway를 사용하고 502 오류가 발생하는 경우 Lambda 프록시 통합을 사용하는 API Gateway REST API에서 HTTP 502 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.