동일한 private subnet 내부에서 ec2 인스턴스와 로드밸런서 간 통신 문제

0

private subnet에서 리액트 어플리케이션을 배포한 ec2 인스턴스에서 로드밸런서를 통해 nestjs로 배포한 애플리케이션으로 요청을 보내려고 할 때,

리액트 어플리케이션이 배포된 ec2 인스턴스에 session manager로 접속 후, curl 로드밸런서 DNS주소 명령어를 통해 nestjs로 배포한 애플리케이션으로부터 요청을 받을 수 있었는데

리액트 어플리케이션 내부에서 axios를 통해 통신하면 로드밸런서로 요청이 들어가지 않는 것을 확인했습니다. (로드밸런서 설정 내부에서 s3 버킷에 로그파일 저장하여 확인)

통신은 https로 해서 로드밸런서에서 ACM 인증서로 인증 후, 대상 그룹으로는 http 통신을 하는 것으로 하였고, 보안그룹은 모든 트래픽을 열어 둔 상태입니다.

robin
질문됨 5달 전215회 조회
2개 답변
3

안녕하세요 robin님

EC2 인스턴스와 로드밸런서의 HTTP Request 에 문제가 있으시군요.


#1
질문자님의 환경을 다음과 같이 이해했는데, 이것이 맞는지 확인 부탁드립니다

VPC 설정

  • Public Subnet (가용영역 : a)
  • Private Subnet (가용영역 : a)
    • EC2 Instance A : React 애플리케이션이 실행중
    • EC2 Instance B : NestJS 애플리케이션이 실행중
  • Public Subnet (가용영역 : b)
  • Private Subnet (가용영역 : b)

Application Load Balancer (ALB A) 의 설정

  • VPC A
    • 가용 영역 : a - Public Subnet (가용영역 a)
    • 가용 영역 : b - Public Subnet (가용영역 b)
  • 리스너
    • HTTP:80 - 대상 그룹 : EC2 Instance B
    • HTTPS:443 - 대상 그룹 : EC2 Instance B

#2

또한, 질문 주신 내용이 다음이 맞는지 확인 부탁드립니다.

  1. EC2 Instance A 에서 Curl 로 ALB A의 DNS 주소로 요청 -> 성공
  2. EC2 Instance A 의 React 애플리케이션에서 axios 로 ALB A의 DNS 주소로 요청 → 실패

답변에 추가적인 도움을 드리기 위해 질문을 드린 것이니 잘못된 부분이 있다면 정정해주세요 :)

profile picture
Ayeon_K
답변함 4달 전
1

안녕하세요 robin님

EC2 내 ReactJS 앱에서 await axios 명령을 수행하셨고, 로드밸런서 엔드포인트를 거쳐 NestJS API를 호출하시려는 것으로 이해했습니다.

다음 조치들이 문제해결에 도움이 될 수 있습니다.


  1. 로드밸런서와 연결된 대상그룹(Target Group)에 NestJS 앱이 실행 중인 EC2가 제대로 포함되어 있는지 확인합니다.
  2. axios로 API 요청 시 CORS 문제가 발생할 수 있습니다. 이 경우 NestJS 공식 문서를 참고하여 CORS 설정을 활성화하셔야 합니다. 예시코드는 다음과 같습니다.
const app = await NestFactory.create(AppModule);
app.enableCors();
await app.listen(3000);

답변이 도움이 되셨기를 바랍니다. 감사합니다.

profile picture
답변함 4달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠