
서버를 처음 설정할 때 가장 많이 막히는 부분 중 하나가 바로 도메인 연결과 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 지원 확인됨 → 최신 보안 프로토콜 사용
'Study > TIL | AWS' 카테고리의 다른 글
| RAM 부족? 5분 만에 swap 파일로 구원하기 (3) | 2025.07.21 |
|---|---|
| VYBZ 서비스 도메인 & Nginx 라우팅 설정 완벽 가이드 (1) | 2025.07.21 |
| EC2 인스턴스 메모리 부족 문제 해결기 (2) | 2025.07.14 |
| EC2 인스턴스 EBS 볼륨 확장 및 파일 시스템 확장 방법 (0) | 2025.06.15 |
| AWS S3 사용 전 꼭 알아야 할 IAM 권한 설정 가이드 (2) | 2025.06.15 |