NGINX 리버스 프록시란
리버스 프록시는 클라이언트의 요청을 받아 내부 백엔드 서버로 전달하고, 응답을 다시 클라이언트에게 돌려주는 중간 서버입니다. 트래픽 분산(load balancing), SSL 종단(SSL termination), 캐싱, WebSocket 업그레이드, 보안 헤더 주입 등 현대 웹 인프라의 핵심 역할을 합니다. NGINX는 가벼운 메모리 사용량과 비동기 이벤트 처리 방식으로 리버스 프록시 분야에서 가장 널리 사용되는 도구입니다.
꼭 들어가야 할 5가지 디렉티브
upstream backend { server 10.0.0.1:8080; ... }— 백엔드 서버 풀proxy_pass http://backend;— 업스트림으로 요청 전달proxy_set_header Host $host;— 원래 호스트명 유지 (가상호스팅 백엔드에 필수)proxy_set_header X-Real-IP $remote_addr;+X-Forwarded-For+X-Forwarded-Proto— 클라이언트 정보 전달proxy_http_version 1.1;+proxy_set_header Upgrade $http_upgrade;— WebSocket을 사용할 때 필수
캐시와 WebSocket
본 도구의 옵션에서 캐시를 켜면 proxy_cache_path가 별도 블록으로 생성되고, location 블록에 proxy_cache, proxy_cache_valid가 추가됩니다. WebSocket 옵션을 켜면 상단에 map $http_upgrade $connection_upgrade { default upgrade; '' close; }가 추가되어 Socket.IO·Action Cable 같은 실시간 통신 백엔드와 정상 동작합니다.
자주 묻는 질문 (FAQ)
Q1. 생성된 설정을 어디에 놓아야 하나요?
일반적으로 /etc/nginx/sites-available/ 또는 /etc/nginx/conf.d/ 디렉토리에 .conf 파일로 저장한 뒤 nginx -t로 문법 검사를 거치고 systemctl reload nginx로 반영합니다.
Q2. Let's Encrypt 인증서 경로가 다른 경우는?
도메인 이름 부분만 다를 뿐 구조는 같습니다. /etc/letsencrypt/live/{도메인}/fullchain.pem 패턴을 따르며, certbot으로 자동 갱신할 경우 별도 갱신 hook 없이도 NGINX가 reload 시 새 인증서를 로드합니다.
Q3. 업스트림이 다운되면 어떻게 되나요?
NGINX는 기본적으로 다운된 업스트림을 일정 시간(fail_timeout 기본 10초) 동안 자동으로 제외하고 다른 정상 서버로 요청을 보냅니다. 백엔드 상태를 더 적극적으로 감지하려면 health_check 디렉티브(상용 NGINX Plus) 또는 별도 모니터링 도구를 사용하세요.