# Nginx 리버스 프록시 패턴 ## 언제 쓰는가 - Backend 앞단에 리버스 프록시가 필요할 때 - Rate Limiting + 보안 헤더를 Nginx 레벨에서 처리할 때 ## 핵심 구조 - zone별 Rate Limiting 분리 - OWASP 권장 보안 헤더 전역 적용 - 경로별 upstream 라우팅 ## 코드 예시 ```nginx # Rate Limiting Zones limit_req_zone $binary_remote_addr zone=api_limit:10m rate=30r/s; limit_req_zone $binary_remote_addr zone=auth_limit:10m rate=5r/s; # 보안 헤더 (전역) add_header X-Frame-Options "DENY" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; client_max_body_size 10m; # 경로별 라우팅 location /api/ { limit_req zone=api_limit burst=50 nodelay; proxy_pass http://backend:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { proxy_pass http://frontend:3000; } ``` ## 주의사항 - Rate Limiting zone은 용도별 분리 (인증 5r/s, API 30r/s 등) - `always` 키워드 필수 — 에러 응답에도 헤더 적용 - SSE/WebSocket 필요 시 `proxy_buffering off` + `proxy_read_timeout 600s` 추가 ## 재사용 방법 - 보안 헤더 블록 그대로 복붙 - zone 이름과 rate 수치만 프로젝트에 맞게 조정 - location 블록에 upstream 서비스명 변경