인프라

Nginx 리버스 프록시 패턴

인프라

Nginx 리버스 프록시 패턴 — 실전 적용 구조와 코드 예시

언제 쓰나 · Backend 앞단에 리버스 프록시가 필요할 때 · Rate Limiting + 보안 헤더를 Nginx 레벨에서 처리할 때

#infra#Nginx#리버스#프록시
다운로드
# 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 서비스명 변경
jt · v1 · CC0-1.0 · 복사 0