[EC2] Error: Request timed out

yeop·2023년 6월 10일

EC2에 올려놓은 서버에 Request가 보내지지 않는다...

에러 로그

  • Error: Request timed out
  • Error: getaddrinfo ENOTFOUND

체크 사항

  • 로드 밸런서 ✔️
  • 타겟 그룹 ✔️
  • EC2 ✔️
  • Route53 - 로드 밸런서 연결 ✔️
  • 네트워크 구성(VPC) ✔️
  • Nginx ✔️
  • Docker network ✔️

AWS

AWS에서 사용 중인 서비스들의 상태를 확인해봤지만 모든 요소가 정상 입력 되어있다.
상태 또한 Healthy로 정상 작동 중임을 확인했다.

Nginx

이러한 에러가 났을 때 내가 가장 먼저 취하는 액션은 로그 확인, WARNING 로그 제거이다.
WARNING으로 인해서 서버가 작동 되지않는 경우는 드물지만 눈에 거슬리는 로그를 제거함과 동시에 에러의 범위를 좁혀 나갈 수 있는 좋은 기회라고 생각하기 때문이다.

  • WARNING - 80포트가 이미 사용 중입니다

    • Nginx의 포트 번호와 타겟 그룹의 포트 번호를 변경하는 방법도 있지만 80번 포트를 사용하는 것이 직관적이기 때문에 포트 번호 변경 없이, 기존에 80포트를 사용 중인 프로세스를 중단시킨 후 Nginx를 재시작했다 --> WARNING 해결
  • 엑세스 로그와 에러 로그가 찍히지 않는다.

    • Nginx는 별도의 설정을 하지 않는다면 nginx.conf.default 파일을 기본 설정으로 실행된다. default 파일의 기본값에서 로그를 저장하는 부분은 수정하지 않았기 때문에 로그가 정상적으로 작동하지 않을 이유가 없었고 로그가 저장되는 원리를 공부해 잘못된 명령어가 있는지 확인했지만 전혀 문제가 없었다.

      결국 nginx를 삭제 후 재설치했지만 Default 패키지들이 재설치 되지 않는 문제 발생했다.
      기존의 설정 파일들이 남아있다면 패키지들이 설치되지 않을 가능성이 있어 모든 패키지를 삭제하고 메타데이터 또한 삭제 후 which 명령어 와 nginx -v 을 통해 남은 nginx 패키지가 있는지 확인 후 재설치를 진행했지만 여전히 파일이 생성되지 않았다.

    • 주변 사람들에게 자문을 구해봤지만 원인을 찾지 못했고 구글링, ChatGpt로도 그 원인을 찾지 못했다. 결국 EC2 인스턴스 포맷을 진행했다.

    • 엑세스 로그에 HealthChecker 로그가 계속해서 찍혀 정상적인 로그 확인에 어려움을 느낀 나는 이번 기회에 엑세스 로그를 정상적인 Https 요청 로그와 Http 리다이렉트 로그로 분리했고 에러 로그와 HealthChecker 로그 파일을 별도로 관리할 수 있도록 설정했다.

Docker

Nginx까지도 Request가 들어오지 못한다는 것을 확인했기에 도커에서 에러가 발생했을 가능성은 0에 가까웠지만 WARNING을 해결하기로 결정했다.

  • Docker network - Docker Container를 Build 할 때 Docker network Warning이 발생했다.network를 삭제하고 ReBuild 함으로써 Warning 해결

해결

종단간 테스트를 진행하고 모든 로그를 확인했음에도 원인을 찾지 못했다
EC2 내부 까지 Request가 도달하지 못한다는 사실은 확실했고, 에러의 원인을 찾지 못한 이유는 방대한 AWS 에코시스템 내부에 내가 인지하지 못한 네트워크 요소들이 있기 때문일 가능성이 크다고 생각했다.
여기서 발동한 승부욕..니가 이기나 내가 이기나 해보자라는 생각으로 AWS Document를 정독해나갔다. 네트워크 (VPC, 서브넷, 게이트웨이 등), 로드 밸런서, 타겟 그룹, 그리고 Route53을 읽어 나가던 중 도메인을 구매한 후 15일 내에 이메일을 통한 인증이 이루어지지 않으면 도메인 사용이 중지된다는 내용을 발견했다. 그 후 이메일 인증을 진행했더니 정상작동되었다...ㅎ

원래는 이 내용에 대해 도메인 페이지에서 경고 메시지를 띄워준다고 한다. 하지만 내가 수차례 확인한 도메인 페이지에는 경고 메시지가 뜨지 않았고 콘솔창에도 관련 내용이 전혀 표시되지 않았다.
심지어 호스팅 영역에서 레코드 테스트를 진행했을 때도 정상적으로 응답이 수신되었다.
알아보니 Route53에서 제공하는 레코드 테스트는 실제 DNS로 쿼리를 보내는 것이 아니라 호스팅 영역의 레코드 설정에 따라 응답할 뿐, 호스팅 영역이 현재 도메인의 트래픽을 라우팅하는 데 사용되고 있는지 여부와 관계없이 동일한 정보를 반환한다고 한다..

레코드 테스트 결과를 믿고 나와 같은 삽질을 하는 사람들이 없었으면...🤣

0개의 댓글