사용자 지정 도메인으로 Amazon CloudFront 배포를 구성했습니다. CloudFront를 통해 대체 Canonical Name Record(CNAME) 도메인을 요청할 때 “The request could not be satisfied.“(요청을 충족하지 못합니다.)라는 502 오류 응답을 받았습니다.
간략한 설명
CloudFront가 오리진에 연결할 수 없는 경우 502 오류가 발생합니다. 오류의 원인 및 문제 해결 방법은 다음 섹션을 참조하십시오.
해결 방법
CloudFront가 오리진 서버와 TCP 연결을 설정할 수 없음
기본적으로 CloudFront는 포트 80(HTTP의 경우) 및 포트 443(HTTPS의 경우)을 통해 오리진에 연결합니다. 오리진이 이러한 포트를 통한 트래픽을 허용하지 않거나, CloudFront IP 주소의 연결을 차단하면 TCP 연결이 실패합니다. 실패로 인해 502 오류가 발생합니다. 이 문제를 해결하려면 CloudFront 배포의 프로토콜 설정이 HTTP 또는 HTTPS 연결에 대한 올바른 포트로 설정되어 있는지 확인합니다.
다음 명령을 실행하여 연결성을 테스트합니다.
telnet ORIGIN_DOMAIN/ORIGIN_IP PORT
참고: ORIGIN_DOMAIN 경우 오리진 도메인의 ID를 입력합니다. ORIGIN_IP에 오리진 IP 주소를 입력합니다. PORT에 오리진 연결에 사용할 포트 번호를 입력합니다.
오리진 서버와의 SSL/TLS 협상에 실패
SSL/TLS 트랜잭션이 실패하면 CloudFront와 오리진 간의 연결이 실패하여 502 오류가 발생합니다. SSL/TLS 트랜잭션 실패의 원인과 해결 방법은 다음 섹션을 참조하세요.
SSL 인증서가 도메인 이름과 일치하지 않음
오리진의 SSL 인증서에는 다음 도메인 이름 중 하나가 포함되거나 포함되어야 합니다.
- 인증서의 Common Name(일반 이름) 필드 또는 Subject Alternative Names(주체 대체 이름) 필드에 있는 오리진 도메인 이름입니다.
- CloudFront 배포의 오리진으로 전달되는 수신 뷰어 호스트 헤더의 호스트 헤더 도메인 이름입니다.
인증서에서 Common Name(일반 이름) 및 Subject Alternative Names(주체 대체 이름)을 확인하려면 다음 명령을 실행합니다.
$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep -E '(CN|Alternative)' -A 2
참고: DOMAIN의 경우 오리진 도메인 이름을 입력합니다. SERVER_DOMAIN에 오리진 도메인 이름을 입력합니다. 또는 뷰어 호스트 헤더가 오리진에 전달되는 경우, SERVER_DOMAIN의 경우 들어오는 호스트 헤더 값을 입력합니다.
다음과 같은 경우 호스트 헤더를 포함하도록 캐시 정책 또는 오리진 요청 정책을 구성합니다.
- SSL 인증서의 일반 이름 또는 스토리지 영역 네트워크(SAN)에는 뷰어 호스트 헤더 값이 포함됩니다.
- 호스트 헤더가 오리진에 전달되지 않습니다.
오리진 인증서가 만료되었거나, 신뢰할 수 없거나, 또는 자체 서명된 경우
사용자 지정 오리진에 설치된 인증서는 신뢰할 수 있는 인증 기관에서 서명해야 합니다. CloudFront에서 신뢰하는 인증 기관은 Mozilla 웹 사이트의 Mozilla 포함 CA 인증서 목록에서 찾을 수 있습니다.
CloudFront는 오리진에 설정된 SSL에 대해 자체 서명된 인증서를 지원하지 않습니다. 자체 서명된 인증서는 신뢰할 수 있는 인증 기관에서 발급하는 대신 조직 자체에서 발급하거나, 웹 서버에서 로컬적으로 생성합니다.
오리진 인증서가 만료되었는지 확인하려면 다음 OpenSSL 명령을 실행합니다. 출력에서 Not Before 및 Not After 파라미터를 찾습니다. 현재 날짜 및 시간이 인증서의 유효 기간 내에 있는지 확인합니다.
$ openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep Validity -A 3
참고: DOMAIN의 경우 오리진 도메인 이름을 입력합니다. SERVER_DOMAIN에 오리진 도메인 이름을 입력합니다. 또는 뷰어 호스트 헤더가 오리진에 전달되는 경우, SERVER_DOMAIN의 경우 들어오는 호스트 헤더 값을 입력합니다.
중간 CA 인증서가 없거나, 중간 인증서의 순서가 잘못되면 HTTPS 통신과 오리진 간에 오류가 발생합니다. 다음 명령을 실행하여 인증서 체인을 확인합니다.
$ openssl s_client -showcerts -connect DOMAIN:443 -servername SERVER_DOMAIN
참고: DOMAIN의 경우 오리진 도메인 이름을 입력하고, SERVER_DOMAIN의 경우 오리진 도메인 이름을 입력합니다. 또는 뷰어 호스트 헤더가 오리진에 전달되는 경우 SERVER_DOMAIN의 경우 들어오는 호스트 헤더 값을 입력합니다.
오리진의 암호화 형식(cipher suite)은 CloudFront에서 지원하지 않음
공통의 협상된 암호화 형식이 없는 경우 CloudFront와 오리진 간의 SSL/TLS 트랜잭션이 실패합니다. 올바른 암호화 형식을 사용하고 있는지 확인하려면 CloudFront와 오리진 간에 지원되는 프로토콜 및 암호를 참조하세요.
SSL Server Test 도구를 사용하여 오리진 도메인 이름이 지원되는 암호 목록에 포함되어 있는지 여부를 확인할 수도 있습니다.
CloudFront가 오리진 IP 주소를 확인할 수 없음
CloudFront가 오리진 도메인을 확인할 수 없는 경우 502 오류가 반환됩니다. 이 문제를 해결하려면 dig/nslookup 명령을 사용하여 오리진 도메인이 IP로 해결되는지 확인합니다.
Linux
$ dig ORIGIN_DOMAIN_NAME
Windows:
nslookup ORIGIN_DOMAIN_NAME
참고: ORIGIN_DOMAIN_NAME의 경우 오리진 도메인 이름을 입력합니다.
성공하면 이 명령은 오리진 도메인 이름의 IP를 반환합니다. DNS 검사기 도구를 사용하여 여러 리전에서 DNS 확인을 확인합니다.
업스트림 오리진 때문에 오류 발생
CloudFront 배포에 정의된 사용자 지정 오리진은 실제 오리진에 연결된 프록시, 콘텐츠 전송 네트워크(CDN) 호스트 이름 또는 로드 밸런서일 수 있습니다. 이러한 중개 서비스 중 하나라도 오리진에 연결하지 못하면, 502 오류가 CloudFront로 반환됩니다. 이 문제를 해결하려면 서비스 공급업체에 문의하세요.
CloudFront 배포와 관련이 있는 Lambda@Edge 함수가 검증에 실패했습니다
Lambda@Edge 함수가 CloudFront에 잘못된 응답을 반환하는 경우 CloudFront는 502 오류를 반환합니다. 이 문제를 해결하려면 Lambda@Edge 함수에서 다음과 같은 일반적인 문제를 확인하세요.
- 반환된 JSON 객체
- 필수 필드 누락
- 응답에서 잘못된 객체
- 허용하지 않거나 읽기 전용인 헤더 추가 또는 업데이트
- 최대 본문 크기 초과
- 유효하지 않은 문자 또는 값
자세한 내용은 Lambda@Edge 함수 테스트 및 디버깅을 참조하세요.