NGINX 가이드·약 7분 내외
NGINX 역방향 프록시 아키텍처 — 공용/프로젝트 프록시 분리
공용 NGINX는 도메인별 분기를, 프로젝트 NGINX는 경로별 분기를 담당합니다. 한 서버에서 여러 웹사이트를 운영할 때 왜 2단계 NGINX 구조가 필요한지 알아봅니다.
아키텍처 구조도
다이어그램 렌더링 중...
왜 NGINX가 2단계로 필요한가?
하나의 서버(VPS) 안에서 IJM(100479.xyz)과 Quizzer(8282100.xyz)처럼 여러 개의 독립적인 프로젝트를 운영해야 할 때가 있습니다.
1단 구조 (모든 설정을 하나에)
- •NGINX 한 대가 모든 도메인과 경로를 통제함
- •프로젝트 A의 설정을 바꾸다가 실수하면 프로젝트 B도 다운됨
- •서버를 이사하거나 확장할 때 뜯어내기 매우 힘듦
2단 구조 (공용 + 프로젝트별)
추천- ✓공용 NGINX가 트래픽을 받고, 각 프로젝트 NGINX로 넘김
- ✓프로젝트끼리 완전히 격리되어 사고 전파가 없음
- ✓프로젝트별로 자신만의 NGINX 설정(nginx.conf)을 관리함
1단계: 공용 nginx-proxy (도메인 기반 분기)
제일 바깥에 위치한 공용 NGINX의 역할은 "어떤 도메인으로 들어온 요청인가?"를 확인하고 해당 프로젝트로 넘겨주는(proxy_pass) 것뿐입니다.
도메인 기반 분기 설정 (nginx-proxy)
server {
listen 443 ssl;
server_name 100479.xyz; # IJM 도메인
location / {
proxy_pass http://ijm-nginx; # IJM 프로젝트망으로 넘김
}
}
server {
listen 443 ssl;
server_name 8282100.xyz; # Quizzer 도메인
location / {
proxy_pass http://quizzer-nginx; # Quizzer 프로젝트망으로 넘김
}
}1
SSL/TLS 암호화 해제
Let's Encrypt 인증서를 사용해 HTTPS 트래픽을 복호화합니다.
2
도메인 확인
server_name 지시어를 통해 어떤 프로젝트로 가야 할지 결정합니다.
3
프로젝트망으로 전달
공용 네트워크(web-proxy)를 통해 내부 컨테이너로 요청을 토스합니다.
2단계: 프로젝트 NGINX (경로 기반 분기)
트래픽을 넘겨받은 프로젝트 NGINX는 이제 "어떤 경로(URL)로 들어온 요청인가?"에 따라 프론트엔드와 백엔드 중 어디로 보낼지 결정합니다.
경로 기반 분기 설정 (프로젝트 NGINX)
server {
listen 80;
# SSL이나 도메인 확인은 이미 공용 NGINX가 했으므로 여기선 신경 안 씀
# /api/로 시작하면 FastAPI(파이썬) 백엔드로
location /api/ {
proxy_pass http://server-blue:8000;
}
# /go-api/로 시작하면 Go 백엔드로
location /go-api/ {
proxy_pass http://server-go:8080;
}
# 그 외 모든 요청은 Next.js 프론트엔드로
location / {
proxy_pass http://web-next:3000;
}
}Q
프로젝트 NGINX에서도 SSL(https) 설정을 해야 하나요?
A
아니요. 공용 NGINX가 이미 암호를 풀어서 80포트(http)로 넘겨주었기 때문에, 프로젝트 내부에서는 SSL 인증서를 관리할 필요가 전혀 없습니다.
환경 분리: dev, staging, prod
공용 NGINX는 도메인뿐만 아니라 환경(운영/스테이징/개발)도 분리해 줍니다.
절대 하지 말아야 할 행동
프로젝트의 nginx.prod.conf 안에 staging 관련 설정을 섞어 넣지 마세요. 스테이징 환경 설정 오류로 인해 운영 환경 NGINX가 죽을 수 있습니다. 도메인 분기는 오직 공용 NGINX의 역할입니다.
dev (로컬 개발)
- •도메인: dev.100479.xyz
- •NGINX 컨테이너를 아예 띄우지 않음
- •빠른 핫 리로드(Hot Reload)를 위해 Next.js 3000포트로 직접 접속
staging (검증 환경)
추천- ✓도메인: staging.100479.xyz
- ✓운영 환경과 똑같은 Docker + NGINX 구조
- ✓배포 전 최종 검증 용도
