Computer Science/CI&CD

[CI/CD] Nginx를 사용한 https 적용 방법

Bay Im 2024. 7. 5. 17:04

AWS EC2 서버 배포는 완료되었지만 해당 URL은 http의 형태이다.

프론트와 서버 연결을 위하여 https 형태의 배포가 필요했다. 


1. 도메인 구매하기

 

 

2. AWS EC2 설정: 인바운드 규칙 추가 

  • EC2- 보안 그룹- 인바운드 규칙 편집
    • 보안 그룹 규칙 1
      • 유형
        • HTTP
      • 프로토콜
        • TCP
      • 포트 범위
        • 80
      • 소스
        • 0.0.0.0/0
    • 보안 그룹 규칙 2
      • 유형
        • HTTPS
      • 프로토콜
        • TCP
      • 포트 범위
        • 443
      • 소스
        • 0.0.0.0/0
    • 보안 그룹 규칙 3
      • 유형
        • SSH
      • 프로토콜
        • TCP
      • 포트 범위
        • 22
      • 소스
        • 0.0.0.0/0
    • 보안 그룹 규칙 4
      • 유형
        • 사용자 지정 TCP
      • 프로토콜
        • TCP
      • 포트 범위
        • 8080
      • 소스
        • 0.0.0.0/0

 

 

3. AWS Route 53 호스팅 영역 생성

  • Route 53- 호스팅 영역- 호스팅 영역 생성
    • 도메인 이름
      • 구매한 도메인 입력
    • 유형
      • 퍼블릭 호스팅 영역 선택
    • 호스팅 영역 생성 클릭
    • 호스트 영역 및 레코드 생성 완료 (만약 IPv6 주소가 있으면 AAAA 유형 추가하기)

 

 

4. EC2 서버에 Nginx 설치

  • EC2 서버 접속
    • Putty.exe 실행
    • Host Name
      • ec2-user@IP주소(EC2 IP주소)
    • SSH- AUTH- Credentials
      • ppk 파일 등록
    • 서버 접속 완료 
  • 터미널 입력
    • Nginx 설치
      • sudo yum install nginx
    • cerbot 설치
      • sudo yum install certbot python3-certbot-nginx
    • 인증서 발급
      • sudo certbot certonly --standalone -d 구매한도메인이름 (-d www.구매한도메인이름)
    • Nginx 시작 및 활성화
      • sudo systemctl start nginx
      • sudo systemctl enable nginx
      • 만약 Nginx가 80 포트 사용 중이면 프로세스 stop 후 진행
        • sudo lsof -i :80
        • sudo kill -9 PID값
        • 다시 인증서 발급 진행
    • nginx.conf 파일 열고 수정
      • sudo nano /etc/nginx/nginx.conf
      • 내용 수정
        • nginx.conf
          #nginx.conf
          
          events {}
          
          http {
            include /etc/nginx/mime.types;
            default_type application/octet-stream
            types_hash_max_size 2048;
            types_hash_bucket_size 64;
            client_max_body_size 10M; # 이미지 업로드 용량 확장 
          
            # 80 포트로 들어오면 https로 redirect
            server { 
              listen 80;
              server_name 구매한도메인이름;
              return 301 https://$host$request_uri;
            }
          
            # 443 포트로 들어오면 인증을 통한 뒤 8080 포트로 이동
            server { 
              listen 443 ssl;
              server_name 구매한도메인이름;
          
              ssl_certificate /etc/letsencrypt/live/구매한도메인이름/fullchain.pem;
              ssl_certificate_key /etc/letsencrypt/live/구매한도메인이름/privkey.pem;
          
              location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
              }
            }
          }


      • 저장 및 닫기
        • Ctrl + O
        • Ctrl + X
    • conf 파일 테스트
      • sudo nginx -t
    • Nginx 재시작
      • sudo systemctl restart nginx
    • Nginx 상태 확인
      • sudo systemctl status nginx

 

 

 

 

추가 내용: 도커 이미지로 관리하는 방법
  • nginx.conf 파일과 같은 위치에 Dockerfile 생성
    • Dockerfile
      FROM nginx:latest
      
      COPY nginx.conf /etc/nginx/nginx.conf
      
      COPY your-cert-directory/fullchain.pem /etc/letsencrypt/live/구매한도메인이름/fullchain.pem
      COPY your-cert-directory/privkey.pem /etc/letsencrypt/live/구매한도메인이름/privkey.pem
      
      CMD ["nginx", "-g", "daemon off;"]
  • 도커 이미지 생성
    • docker build -t 도커이미지이름 .
  • 도커 컨테이너 실행
    • docker run -d -p 80:80 -p 443:443 도커이미지이름
  • 도커 명령어 모음
    • 실행 중인 컨테이너 목록 확인
      • docker ps
    • 특정 컨테이너 중지
      • docker stop 컨테이너ID
    • 컨테이너 시작
      • docker start 컨테이너ID
    • 컨테이너 재시작
      • docker restart 컨테이너ID

 

728x90