클라이언트 편에 서서 대신 요청을 보내준다.
서버 입장에서는 진짜 클라이언트가 누군지 숨겨짐 — 사내망 VPN, 우회 접속, 콘텐츠 필터링에 사용.
🛡️ 역방향 프록시 Reverse Proxy
클라이언트들
→
Nginx (역방향)
→
내부 서버들
서버 편에 서서 요청을 대신 받아준다.
클라이언트는 실제로 어떤 서버가 응답했는지 모름 — 이 사이트(offset0xf.com)도
바로 이 구조로 운영 중!
🧪 인터랙티브 데모 — 이 서버의 실제 Nginx 라우팅 재현
Host 헤더 기반 라우팅
지금 이 페이지가 떠 있는 서버(43.203.123.184)는 Nginx 1대가 443 포트로 요청을 받아,
브라우저가 보낸 Host 헤더(도메인)를 보고
5개의 서로 다른 FastAPI(Gunicorn) 프로세스 중 하나로 proxy_pass 합니다.
아래에서 도메인을 골라 요청을 보내보세요.
:8001 fastapi-schoolgunicorn
:8002 fastapi-jobhanyanggunicorn
:8003 fastapi-homegunicorn
:8005 fastapi-hongbogunicorn
:8008 fastapi-lmsgunicorn
브라우저
Nginx :443
내부 서버
// 요청 대기 중...
✅ 리버스 프록시가 해주는 일
① 단일 진입점 80/443 포트 하나로 5개 앱 전부 처리. 각 앱은 내부 전용 포트(8001~8008)만 사용.
② TLS 종료 (SSL Termination) 인증서 관리·복호화를 Nginx가 전담. 내부 Gunicorn과는 평문 HTTP로 통신.
③ 내부 구조 은닉 외부에는 도메인만 보이고, 실제 포트/프로세스 구성은 노출되지 않음.
④ 그 외 정적 파일 캐싱, 요청 로깅, 헤더 기반 라우팅, 향후 로드밸런싱 확장.
📄 Nginx 설정 예시 offset0xf.com
server {
listen443 ssl;
server_name offset0xf.com;
# TLS 인증서 - Nginx가 종료ssl_certificate /etc/letsencrypt/.../fullchain.pem;
location / {
# 내부 Gunicorn(8001)으로 전달proxy_passhttp://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# jobhanyang.com → 다른 server 블록 → :8002
# 같은 443 포트, Host 헤더로만 구분!
🔍 로드 밸런서와 헷갈리지 말 것
리버스 프록시 —
Host/경로 기준으로 서로 다른 앱에 요청을 나눠준다 (이 서버의 경우).
로드 밸런서 —
같은 앱의 여러 복제본(Round Robin 등)에 트래픽을 분산한다.
Nginx는 두 역할을 동시에 할 수 있는 소프트웨어일 뿐,
"리버스 프록시"는 목적(대리 수신)을, "로드 밸런서"는
목적(부하 분산)을 가리키는 서로 다른 개념이다.