본문 바로가기

Study/TIL | AWS

Route53부터 Certbot까지 : HTTPS 서버 구축 초기 과정

 

서버를 처음 설정할 때 가장 많이 막히는 부분 중 하나가 바로 도메인 연결과 HTTPS(SSL) 설정이다.  


이번 글에서는 vybz.kr 도메인을 기반으로 Route53, Nginx, Certbot을 활용해  
서브도메인(www, back)을 HTTPS로 안전하게 연결하는 과정을 정리해보았다


1. 사용자 요청 흐름

사용자 브라우저
   |
   | 입력: https://www.vybz.kr
   ↓
DNS 요청 → A 레코드 → 3.38.58.133 (EC2 IP)
   ↓
EC2 보안 그룹 확인 → 443 포트 허용 여부 검사
   ↓
허용됨 → nginx에서 HTTPS 처리 → 응답

 

보통 실무에서는 프론트(www.vybz.kr)와 백엔드(back.vybz.kr)를 서브도메인으로 분리해 관리합니다.

 


2. Route 53 서브도메인 설정

→ 하나의 도메인(vybz.kr)으로도 가능하지만, 보통 실무에선 서브도메인으로 구분해 관리합니다.

 

 

👉 Nginx 설정 전에 Route53 호스팅 영역에 www.vybz.kr / back.vybz.kr 서브도메인을 A레코드로 추가

 

 

3. HTTPS를 위한 443 포트 허용

EC2 보안 그룹에서 443 포트를 열어 HTTPS 요청을 받을 수 있게 설정했습니다.

 

 

https://www.vybz.kr/ or   https://vybz.kr/ 접속 

 


4. Nginx & Certbot 설치

Nginx 설치 & 부팅 시 자동 실행

 

# 1. 부팅 시 nginx 자동 실행 설정
sudo systemctl enable nginx

# 2. nginx 서비스 시작 (지금 바로 실행)
sudo systemctl start nginx

# 3. nginx 실행 상태 확인
sudo systemctl status nginx

🤖 python3-certbot-nginx

  • certbot이 nginx를 자동으로 설정할 수 있도록 도와주는 플러그인입니다.
  • 이게 없으면 nginx에 인증서를 수동으로 적용해야 합니다.
  • 설치되면 certbot이 nginx 설정 파일을 분석하고 자동으로 SSL 설정을 추가해줍니다.

 

Certbot & 플러그인 설치

// nginx에 SSL(HTTPS)을 쉽게 적용할 수 있도록 도와주는 툴을 설치하는 명령어
sudo apt install certbot python3-certbot-nginx

 

 

💡 certbot

  • Let's Encrypt에서 무료 SSL 인증서(HTTPS)를 발급해주는 툴입니다.
  • 인증서 발급뿐 아니라 자동 갱신, 설정 적용까지 도와줍니다.

 

⏳ 실행 중 선택 항목

  • 이메일 입력
  • 서비스 약관 동의 (Y)
  • 마케팅 수신 여부 (N 가능)
  • HTTP → HTTPS 리디렉션 (2번 추천)

 

5. SSL 인증서 발급

// SSL 발급 명령어 
sudo certbot --nginx -d vybz.kr -d www.vybz.kr
ping vybz.kr

// 응답
PING vybz.kr (3.18.28.212) 56(84) bytes of data.

 

 

6. 인증서 발급 상태 확인

// SSL 인증서 발급 상태 확인 명령어 
sudo certbot certificates

 

✅ 분석 결과

항목
도메인 vybz.kr, www.vybz.kr
인증서 상태 정상 발급됨
인증서 유형 ECDSA (더 안전하고 가벼운 키 타입)
만료일 📅 2025-08-24 (현재 기준 87일 남음)
설치 경로 fullchain.pem, privkey.pem 모두 존재
nginx 적용 가능 이미 적용 가능 상태 

 

 

4개의 인증서 파일 확인 명령어 

sudo ls -l /etc/letsencrypt/live/vybz.kr/

 

 

✅ 인증서 발급 상태

👉 현재 디렉토리 /etc/letsencrypt/live/vybz.kr/ 도메인 아래에 README 외 4개의 .pem 키가 형성되었다면 정상적으로 SSL 발급

파일명 상태 설명 
README 인증서 사용법 안내
cert.pem ✅ 링크됨 서버 인증서
chain.pem ✅ 링크됨 중간 인증서
fullchain.pem ✅ 링크됨 cert.pem + chain.pem (nginx에서 주로 사용)
privkey.pem ✅ 링크됨 개인키 (비공개)

 

✅ Nginx 설정 디렉토리 구조 요약

디렉토리/파일 역할 설명
/etc/nginx/nginx.conf 메인 설정 파일 Nginx의 핵심 설정 (worker 수, 이벤트, 로그 등) + 하위 설정 include
/etc/nginx/sites-available/ 가상 서버 설정 보관소 서버 블록(server {}) 정의 위치. "이론상 가능한 서버"를 여기 모아둠
/etc/nginx/sites-enabled/ 실제로 작동 중인 서버 설정 sites-available의 파일을 ln -s로 연결 (symbolic link)
/etc/nginx/conf.d/ 추가 설정 파일 위치 일반적으로 *.conf 파일을 넣으면 자동 포함됨 (사이트 외 공통 설정에 사용됨)

🔧 Nginx default 설정 분석

 

(1) Nginx의 기본 서버 설정 파일 수정 명령어 

nano /etc/nginx/sites-available/default

 

(2) nginx 라우팅 설정 

server {
    listen 80;
    server_name vybz.kr;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 443 ssl;
    server_name vybz.kr;

    ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 80;
    server_name www.vybz.kr;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 443 ssl;
    server_name www.vybz.kr;

    ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

 

 

nginx 설정 파일(nginx.conf, sites-available/default 등)이 문법적으로 올바른지 검사하는 명령어

sudo nginx -t

 

 

nginx를 재시작하지 않고 설정 파일만 다시 읽어오도록 하는 명령어

→ 연결 중인 사용자에게 영향 없이 설정 변경 적용

sudo systemctl reload nginx

 

 

프론트가 없기 때문에 임시로 route 확인할 수 있는 eureka 포트 연결해보기 

server {
    listen 80;
    server_name vybz.kr;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 443 ssl;
    server_name vybz.kr;

    ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 80;
    server_name www.vybz.kr;

    return 301 https://www.vybz.kr$request_uri;
}

server {
    listen 443 ssl;
    server_name www.vybz.kr;

    ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

	// eureka root로 잡아두기
    location / {
        proxy_pass http://localhost:8761/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

 

 

https://www.vybz.kr/ 접속 시 eureka 대시보드 나옴 

 


 

🔗 sites-enabled의 심볼릭 링크 확인

  • Nginx는 /etc/nginx/sites-available/ 디렉토리에 실제 서버 설정 파일을 저장하고,
  • /etc/nginx/sites-enabled/ 디렉토리에 **심볼릭 링크(symbolic link)**를 걸어 실제로 활성화할 설정만 불러온다

1. 심볼릭 링크 확인 명령어

ls -l /etc/nginx/sites-enabled/

 

출력 예시 : 

lrwxrwxrwx 1 root root 34 May 26 11:53 default -> /etc/nginx/sites-available/default

 

 

'default -> /etc/nginx/sites-available/default' 해석

  • /etc/nginx/sites-enabled/default는 심볼릭 링크이고
  • 실제 파일 위치는 /etc/nginx/sites-available/default
  • nginx는 nginx.conf 안에서 include /etc/nginx/sites-enabled/*;로 이 파일을 자동 읽어 적용 중
[ sites-available ]
    └── default  (진짜 파일)

[ sites-enabled ]
    └── default → /etc/nginx/sites-available/default  (가리키는 링크)

💡https 테스트

: 아래의 홈페이지에 현재 반영한 도메인을 입력하여, https 요청 시 SSL 인증이 정상적으로 동작하는지 확인할 수 있다.

 

 

✅ 요약: SSL 인증 테스트 결과 (ssllabs.com 기준)

🔒 Overall Rating: A

  • 서버 인증서, 프로토콜, 키 교환, 암호화 강도 모두 우수
  • TLS 1.3 지원 확인됨 → 최신 보안 프로토콜 사용