-
EC2로 Spring 레거시 배포하고 HTTPS 인증받기 (Nginx + Tomcat 연동 With Docker)Infra/AWS 2024. 8. 13. 15:48
1. 사전작업
- Nginx와 Tomcat을 띄울 인스턴스 2개
- WAS 배포 인스턴스에 Docker가 다운받아져야함
- Tomcat을 띄운 인스턴스는 깃허브 연동 (깃에서 pull 받아올 것)
2. 인스턴스2에 war 배포하기
2.1 배포를 위한 Dockerfile 작성 (프로젝트의 루트에 이를 작성해서 저장한다 파일 이름은 Dockerfile이다)
Dockerfile의 내용은 다음과 같다.
# 1. Maven 빌드 단계 FROM maven:3.9.8-eclipse-temurin-11 AS build # 2. 프로젝트 소스 복사 COPY . /app # 3. 작업 디렉토리 설정 WORKDIR /app # 4. Maven을 사용하여 프로젝트 빌드 (테스트 생략) RUN mvn clean package -DskipTests # 5. Tomcat 베이스 이미지 FROM rapidfort/tomcat9-openjdk11-lb # 6. 빌드된 WAR 파일을 Tomcat의 웹앱 디렉토리에 복사 COPY --from=build /app/target/*.war /usr/local/tomcat/webapps/ROOT.war # 7. Tomcat 실행 (기본 설정으로 이미 ENTRYPOINT가 설정되어 있음)
*ROOT.war에 배포하면, context path는 자동으로 /로 배포된다.
*jdk 버전이 달라지면 이에 맞는 태그를 사용하면 된다.
2.2 git허브에서 프로젝트 받아오기
먼저 소스파일을 저장할 폴더 생성
mkdir myapp
git 리포지토리에서 clone 받아오기
git clone 리포지토리url .
2.3 Dockerfile을 통해 이미지 빌드하기
docker build -t my-maven-web-app . // docker build -t [빌드 후 이미지명] [dockerfile 위치]
2.4 빌드한 이미지로 container 띄우기
docker run -p 8080:8080 my-maven-web-app
3. 인스턴스1에 Nginx 다운
sudo apt update sudo apt install nginx
http://EC2 IP주소 했을 때
위 화면이 나오면 성공이다.
4 Cerbot으로 HTTPS 인증받고 reverse proxy 연결
* 원래는 가비아 혹은 Route53에서 도메인을 발급 받아야하지만, 연습을 위해
https://xn--220b31d95hq8o.xn--3e0b707e/
위 사이트에서 도메인을 발급받았다.
4.1 도메인 발급 및 연결
ip주소연결에 nginx가 작동중인 EC2의 ip주소를 입력해준다.
도메인이 연결 완료
4.2 CertBot 설치
sudo snap install certbot --classic
4.3 인증서 발급
sudo certbot --nginx -d {도메인}
4.4 NGINX 설정으로 이동
#경로로 이동 cd /etc/nginx/sites-available # 파일 권한 설정 sudo chmod 777 default #편집기 실행 sudo vi defautl
*중간중간 폴더나 파일에 들어갈 수 없으면 sudo chmod로 권한을 설정해준다.
4.5 프록시 설정
server_name 도메인명 #managed by certbot 부분을 찾는다. 아래에 Location을 추가한다.
location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 클라이언트가 프록시 처리한 모든 서버의 IP 주소 목록 proxy_set_header X-Forwarded-Proto $scheme; #프록시 서버의 HTTP 응답이 HTTPS로 변환 proxy_set_header X-Real-IP $remote_addr; # 실제 방문자의 원격 ip 주소 proxy_set_header Host $http_host; # 클라이언트가 요청한 원래 호스트 주소 proxy_pass http://{private-ip}:8080; # 프록시 해줄 서버의 EC2 IP }
4.6 NGINX 재시작
sudo systemctl restart nginx
*추가
location / { #root /usr/share/nginx/html; #index index.html index.htm; proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } location ~ \.(css|js|jpg|jpeg|gif|png|html)$ { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } location ~ \.jsp$ { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; }
위와 같이 url 패턴에 따라 리버스 프록시를 연결할 수도 있다.
첫번째는 /에 요청에 대해, 두번째는 각종 확장자에 대해, 세번째는 .jsp요청에 대해 연결한다.
참고자료
https://mrgamza.tistory.com/711
https://ironmask43.tistory.com/24
https://velog.io/@bruni_23yong/Certbot%EC%9C%BC%EB%A1%9C-HTTPS%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
'Infra > AWS' 카테고리의 다른 글
EC2에 Spring 레거시 배포하기 (0) 2024.08.12 AWS - S3,Cloudfront를 활용한 웹 페이지 배포 (0) 2024.05.09 AWS - S3를 활용한 파일 및 이미지 업로드 (0) 2024.05.09 AWS - RDS 생성 (0) 2024.05.09 ELB를 활용하여 HTTPS 연결하기 (2) - ELB에 도메인 연결 HTTPS 적용 (0) 2024.05.08