IT/DevOps

[AWS] EC2 Nginx Reverse Proxy(feat. Docker compose)

어흥꼬비 2025. 2. 15.

이전 포스팅

 

[AWS] AWS EC2에서 Docker-compose로 Nginx, Tomcat 연동

이전 포스팅 [AWS] EC2 인스턴스에서 Spring Boot와 Docker로 배포이 포스팅에서는 ssh로 EC2 인스턴스에 접속한 다음에 이루어지는 개발환경 세팅을 다룬다.패키지 최신화우분투 환경이라 아래 명령어

yaga.tistory.com


이 포스팅에서는 기존에 구축환경에 Nginx의 리버스 프록시로 로드밸런싱을 추가한다.

이전 포스팅을 진행하고 와야 이번 내용을 진행하기 수월하다.

기존에 Docker-compose환경으로 Nginx와 Tomcat만 서로 연동 했었다.

디렉토리 구조를 위와 같이 만들고 기존의 tomcat폴더를 tomcat1로 그리고 tomcat2폴더를 추가했다.

몇가지 설정만 변경해주면 된다.

Tomcat1

Dockerfile

이번에는 app1.war를 실행하도록 변경했고 포트도 9090으로 바꿔서 명시했다.(이건 개발자 마음)

이 애플리케이션에서는 "tomcat 1 ==> main request~~~~"라고 로그가 출력된다.

Tomcat2

Dockerfile

여기서는 app2.war를 실행하도록 했다.

이 애플리케이션에서는 "tomcat 2 ==> main request~~~~"라고 로그가 출력된다.

nginx.conf

핵심이 upstream {서버명} 부분이다.

upstream뒤에 명칭을 적고 server뒤에 docker-compose.yml에서 설정한 서비스명과 포트를 적는다.

그 후 location / {} 부분의 proxy_pass에 http://{upstream 명칭}으로 수정한다.

리버스 프록시를 upstream 서버로 하겠다고 변경한 것이다.

Docker-compose.yml

기존과 달라진 건 크게 없다.

services안의 서비스명이 tomcat1,2로 변경, container_name도 tomcat1,2로 변경, 포트 변경

그리고 의존관계도 nginx는 tomcat1,2가 실행된 후에 실행되도록 했다.

Docker compose로 컨테이너 빌드/실행

sudo docker-compose up -d --build

컨테이너가 정상적으로 실행되었는지 확인한다.

sudo docker ps -a

컨테이너 종료된 것 없이 잘 올라왔다.

호출 테스트

로컬 브라우저에서 EC2 IP 입력 후 서버에서 tomcat1,2 request가 번갈아서 출력되는지 확인

브라우저에서 EC2 IP를 입력해서 서버 호출 시 예상대로 번갈아가면서 서버 로그가 출력된다.

tomcat 컨테이너 로그 출력

sudo docker logs -f tomcat1
sudo docker logs -f tomcat2

크게 변경한 것 없이 Nginx의 리버스 프록시Docker-compose를 통해 정말 손쉽게 로드밸런싱 처리를 했다.


개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

댓글