
우리 서비스는 유저 앱, 버스커 앱, 관리자 앱, 백엔드 API로 구성되어 있어
각 앱마다 진입점을 다르게 두어 서브 도메인 기반으로 라우팅을 설정했다
💡 알아두면 좋은 용어
- CNAME (Canonical Name Record)
다른 도메인으로 연결할 때 사용하는 레코드.
예: www.vybz.kr → vybz.kr (도메인 별칭 설정) - A 레코드 (Address Record)
도메인을 특정 서버의 IP 주소로 직접 연결할 때 사용.
예: vybz.kr → 123.45.67.89
1. 도메인 레코드 설정
- A 레코드 : 도메인을 특정 IP로 직접 연결할 때 사용
- CNAME 레코드 : 다른 도메인으로 연결할 때 사용
예를 들어, www.vybz.kr 서브 도메인을 vybz.kr과 동일한 IP로 연결하려면 :
www.vybz.kr → CNAME → vybz.kr
→ 이렇게 설정하면 www.vybz.kr 요청도 vybz.kr로 트래픽이 포워딩됩니다.



2. Nginx 라우팅 구조
앱이 3개(유저/버스커/관리자)이고, 별도의 API 서버가 있어 총 4개의 진입점을 사용합니다.
(1) HTTP → HTTPS 리다이렉트
모든 HTTP 요청을 HTTPS로 강제 리디렉션 :
# 1. HTTP 요청 전부 HTTPS로 리디렉션
server {
listen 80;
server_name vybz.kr www.vybz.kr back.vybz.kr busker.vybz.kr admin.vybz.kr;
return 301 https://$host$request_uri;
}
# 2. vybz.kr → 유저 앱
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;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
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;
}
}
# 3. www.vybz.kr → 유저 앱
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;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
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;
}
}
# 4. busker.vybz.kr → 버스커 앱
server {
listen 443 ssl;
server_name busker.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;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
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;
}
}
# 5. admin.vybz.kr → 관리자 앱
server {
listen 443 ssl;
server_name admin.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;
location / {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
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;
}
}
# 6. back.vybz.kr → 백엔드 API (포트 8000)
server {
listen 443 ssl;
server_name back.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;
location / {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
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;
}
}
🚧 Nginx 라우팅 설정 시 발생한 문제와 해결
VYBZ 서비스의 프론트, 백엔드(API) 서버를 서브 도메인(www.vybz.kr, back.vybz.kr)으로 분리해 Nginx 라우팅을 설정하는 과정에서 SSL 인증서 발급 문제가 발생했다
back.vybz.kr 접근 시 인증서가 발급되지 않아 아래와 같은 오류 화면이 발생했다.

이는 Certbot 발급 시 back.vybz.kr을 포함하지 않았기 때문에 발생한 문제였다.
🔥 해결방법
(1) Certbot을 통한 인증서 재발급
back.vybz.kr을 포함해 모든 서브 도메인을 함께 인증서 발급
sudo certbot --nginx -d vybz.kr -d www.vybz.kr -d back.vybz.kr
-d 옵션에 모든 도메인/서브도메인을 추가해야 통합 인증서가 발급됩니다.
(2) Nginx 설정 파일 확인 및 재시작
Nginx 설정 문법 검증
sudo nginx -t
설정이 올바르다면 Nginx를 재시작
sudo systemctl reload nginx
(3) 인증서를 발급 완료한 최종 Nginx 설정
server {
listen 80;
server_name vybz.kr www.vybz.kr back.vybz.kr;
return 301 https://$host$request_uri;
}
// 프론트 서버를 위한 서브 도메인 (www.vybz.kr)
server {
listen 443 ssl;
server_name vybz.kr www.vybz.kr;
ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:8761/;
proxy_http_version 1.1;
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;
}
}
// 백엔드 서버를 위한 서브 도메인 (back.vybz.kr)
server {
listen 443 ssl;
server_name back.vybz.kr;
ssl_certificate /etc/letsencrypt/live/vybz.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vybz.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location = / {
return 302 /swagger-ui/index.html;
}
location / {
proxy_pass http://localhost:8000/;
proxy_http_version 1.1;
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;
}
}
(4) 설정 완료 후 back.vybz.kr에 접근 시, 정상적으로 HTTPS 연결 및 백엔드 API 접근이 가능

- 문제 원인 : back.vybz.kr 인증서 미발급.
- 해결 방법 : sudo certbot --nginx -d vybz.kr -d www.vybz.kr -d back.vybz.kr 명령어로 통합 인증서 발급.
- 주의할 점 : 새로운 서브 도메인을 추가하면 반드시 certbot으로 인증서 재발급을 해줘야 함.
'Study > TIL | AWS' 카테고리의 다른 글
| RAM 부족? 5분 만에 swap 파일로 구원하기 (3) | 2025.07.21 |
|---|---|
| Route53부터 Certbot까지 : HTTPS 서버 구축 초기 과정 (2) | 2025.07.21 |
| EC2 인스턴스 메모리 부족 문제 해결기 (2) | 2025.07.14 |
| EC2 인스턴스 EBS 볼륨 확장 및 파일 시스템 확장 방법 (0) | 2025.06.15 |
| AWS S3 사용 전 꼭 알아야 할 IAM 권한 설정 가이드 (2) | 2025.06.15 |