한양과학기술고등학교

에듀테크 프로젝트 대시보드

리버스 프록시 (Reverse Proxy)

🙈 정방향 프록시 Forward Proxy
클라이언트
→
정방향 프록시
→
인터넷 서버들
클라이언트 편에 서서 대신 요청을 보내준다.
서버 입장에서는 진짜 클라이언트가 누군지 숨겨짐 — 사내망 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 { listen 443 ssl; server_name offset0xf.com; # TLS 인증서 - Nginx가 종료 ssl_certificate /etc/letsencrypt/.../fullchain.pem; location / { # 내부 Gunicorn(8001)으로 전달 proxy_pass http://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는 두 역할을 동시에 할 수 있는 소프트웨어일 뿐, "리버스 프록시"는 목적(대리 수신)을, "로드 밸런서"는 목적(부하 분산)을 가리키는 서로 다른 개념이다.