Nginx + Route 53 + Certbot + Elastic IP를 이용한 HTTPS 적용 단계

minpractice_jhj·2025년 3월 24일

AWS

목록 보기
6/10

🔥 배포 전에 설정하고 배포 당일에 적용하는 이유

서비스 중단 시간 최소화

  • 배포 당일에는 최소한의 작업만 수행하여 서비스 중단을 줄인다.
  • 미리 설정 가능한 부분(Nginx, 도메인, SSL 설정 등)은 배포 전에 완료해 둔다.

Elastic IP(EIP) 비용 절감

  • 2024년 2월 1일부터 EIP가 유료이므로, 필요할 때만 할당해서 사용해야 한다.
  • 배포 전에는 퍼블릭 IP로 설정 및 테스트하고, 배포 당일에만 EIP를 할당하여 비용을 절감한다.

SSL 인증서 발급 및 갱신 문제 방지

  • Certbot을 이용해 SSL 설정을 미리 준비하고, 배포 당일에만 도메인과 연결 후 인증서 발급을 진행한다.
  • 도메인이 올바르게 설정되지 않은 상태에서 SSL을 발급하면 오류가 발생할 수 있기 때문에,배포 당일에 도메인 연결 후 Certbot을 실행하는 것이 안정적이다.

사전 테스트 및 오류 방지

  • Nginx, 도메인 연결, 리버스 프록시 설정 등을 사전에 테스트하여 배포 당일 장애 발생 가능성을 줄인다.
  • 배포 후에는 트래픽이 실제 유입되므로, 미리 검증된 설정을 바로 적용하는 것이 중요하다.

배포 전 할 일

🔹 Route 53에서 도메인 설정 및 EC2 연결 준비

  • 배포 당일 IP가 바뀌더라도 도메인을 미리 준비할 수 있음
  • A 레코드를 설정해 두면, 배포 당일 Elastic IP를 연결하는 것만 남음

🔹 Nginx 설치 및 리버스 프록시 설정

  • Nginx는 서버에서 미리 설치 및 설정 가능
  • 백엔드 애플리케이션과 연동하여 미리 테스트 가능
  • 배포 당일엔 Nginx를 다시 설정할 필요 없이 SSL 적용만 하면 됨

🔹 Certbot 설치 및 SSL 인증서 설정 준비

  • Certbot 자체는 미리 설치 가능
  • 하지만 인증서 발급은 도메인과 서버가 정상적으로 연결된 후 가능 (Elastic IP 필요)
  • 따라서 사전 설치만 해두고, 실제 인증서는 배포 당일 발급

🔹 Nginx SSL 설정 미리 작성 (인증서 경로는 비워둠)

  • server_name example.com; 등의 설정을 미리 적용해 두면 배포 당일 빠르게 SSL 설정 가능
  • Certbot이 자동으로 설정을 수정할 수 있도록 미리 준비

  • 배포 전까지 할 수 있는 단계

    1️⃣ Route 53에서 도메인과 EC2 연결 준비

    Route 53에서 A 레코드 설정
    • Route 53에서 도메인을 등록 또는 기존 도메인 사용

    • A 레코드를 추가하고 EC2 퍼블릭 IP를 입력 (Elastic IP는 배포 당일 할당)

      example.com → <EC2 퍼블릭 IP

      2️⃣ Nginx 설치 및 리버스 프록시 설정

      Nginx 설치

      sudo apt update
      sudo apt install nginx -y

      Nginx 리버스 프록시 설정

    • /etc/nginx/sites-available/default 수정

      sudo vi /etc/nginx/sites-available/default
      nginx
      복사편집
      server {
          listen 80;
          server_name example.com;
      
          location / {
              proxy_pass http://localhost: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;
          }
      }
      

      설정 적용

      sudo nginx -t  # 설정 파일 문법 체크
      sudo systemctl restart nginx

      방화벽 설정 (UFW 사용 시)

      sudo ufw allow 'Nginx Full'
      sudo ufw enable

      3️⃣ Certbot 설치 및 SSL 인증서 발급 준비

      Certbot 설치 (Let's Encrypt)

      sudo apt install certbot python3-certbot-nginx -y

      Nginx SSL 설정을 미리 준비

    • server_nameexample.com으로 설정되었는지 확인

    • Certbot이 실행될 때 자동으로 SSL 설정을 추가할 수 있도록 준비


배포 당일 할 일

🔹 Elastic IP 할당 및 EC2에 연결

  • AWS에서 Elastic IP를 할당해야 EC2의 퍼블릭 IP가 고정됨
  • 기존 퍼블릭 IP는 재부팅 시 변경될 수 있기 때문에 배포 직전에 Elastic IP로 고정

🔹 Certbot 실행하여 SSL 인증서 발급

  • SSL 인증서는 도메인과 서버가 제대로 연결된 후 발급 가능
  • Elastic IP가 적용된 후 Certbot이 정상적으로 example.com을 확인하고 인증서를 발급

🔹 Nginx 설정 적용 및 재시작

  • SSL 인증서 적용 후, 변경된 설정을 반영하기 위해 Nginx를 재시작해야 함

🔹 SSL 자동 갱신 설정 (certbot renew + crontab 등록)

  • 인증서 자동 갱신을 설정해야 이후에도 서비스가 중단되지 않음
  • Nginx를 주기적으로 다시 로드하도록 cron 작업을 추가하여 인증서 적용 자동화

  • 배포 당일에 할 일

    1️⃣ Elastic IP 할당 및 EC2 인스턴스 연결

    AWS 콘솔에서 Elastic IP 생성 후 EC2에 연결Route 53에서 A 레코드의 IP를 Elastic IP로 변경
    plaintext
    복사편집
    example.com → <Elastic IP>
    

    2️⃣ Certbot으로 SSL 인증서 발급

    Certbot 실행하여 SSL 인증서 발급
    bash
    복사편집
    sudo certbot --nginx -d example.com
    
    • 이메일 입력 후 약관 동의

    • HTTP에서 HTTPS로 자동 리디렉션할지 선택 (권장: Yes)

      발급된 인증서 확인

      bash
      복사편집
      sudo ls /etc/letsencrypt/live/example.com/
      

      3️⃣ Nginx 재시작 및 설정 적용

      Nginx 설정 확인 후 재시작

      bash
      복사편집
      sudo nginx -t
      sudo systemctl restart nginx
      

      HTTPS 적용 확인

      plaintext
      복사편집
      https://example.com
      

      4️⃣ SSL 인증서 자동 갱신 설정

      자동 갱신 테스트

      bash
      복사편집
      sudo certbot renew --dry-run
      

      자동 갱신 cron 작업 추가

      bash
      복사편집
      echo "0 3 * * * certbot renew --quiet && systemctl reload nginx" | sudo tee -a /etc/crontab
      
    • 매일 새벽 3시에 인증서 갱신 및 Nginx 재시작


profile
운동처럼 개발도 작은 실천이 성장의 힘이 된다고 믿는 개발자 minpractice_jhj 기록

0개의 댓글