Nginx Proxy Guard의 내부 구조 및 데이터 흐름을 시각적으로 설명합니다.
┌─────────────────────────────────────────────────────────────────────┐
│ 인터넷 │
└─────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Nginx Proxy (포트 80/443) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ Rate Limit │ │ModSecurity │ │ Bot Filter │ │ Geo Block │ │
│ │ │ │ WAF+CRS4 │ │ 130+ Sigs │ │ GeoIP2 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ SSL/TLS │ │ Fail2ban │ │ Challenge │ │ URI Block │ │
│ │HTTP/2 HTTP/3│ │ Auto-Ban │ │ CAPTCHA │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ Headers │ │ Cloud IP │ │ Caching │ │ Exploit │ │
│ │ Security │ │ Block │ │ Compression │ │ Block │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │
└─────────────────────────────┬───────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Backend 1 │ │ Backend 2 │ │ Backend N │
│ │ │ │ │ │
└───────────┘ └───────────┘ └───────────┘
┌─────────────────────────────────────────────────────────────────────┐
│ 관리 레이어 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ React UI │◄─│ Go API │◄─│ PostgreSQL │ │ Valkey │ │
│ │ (포트 81) │ │ (포트 8080) │ │ 17 │ │ (Redis) │ │
│ │ TypeScript │ │ Echo v4 │ │ │ │ Cache │ │
│ │ Tailwind │ │ JWT+TOTP │ │ │ │ Ban List │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
참고: nginx 컨테이너는 호스트 네트워크 모드로 실행되어 프록시 프로토콜 없이도 실제 클라이언트 IP를 직접 확인할 수 있습니다. 나머지 서비스는 npg-network 브리지 네트워크에 속합니다.
클라이언트 요청
↓
┌──────────────────────────────────────────┐
│ Nginx (Layer 1) │
│ 1. Rate Limiting 체크 │
│ 2. IP 차단 목록 확인 │
│ 3. GeoIP 지역 제한 확인 │
│ 4. Bot Filter 검사 │
│ 5. Challenge (CAPTCHA) 확인 │
│ 6. Cloud Provider IP 차단 │
│ 7. URI 차단 규칙 확인 │
└──────────────────────────────────────────┘
↓ (통과 시)
┌──────────────────────────────────────────┐
│ ModSecurity WAF (Layer 2) │
│ 1. OWASP CRS 규칙 검사 │
│ 2. SQL Injection 탐지 │
│ 3. XSS 탐지 │
│ 4. 경로 탐색 탐지 │
│ 5. 명령어 인젝션 탐지 │
└──────────────────────────────────────────┘
↓ (통과 시)
┌──────────────────────────────────────────┐
│ 프록시 처리 (Layer 3) │
│ 1. SSL/TLS 종료 │
│ 2. 캐싱 및 압축 │
│ 3. 보안 헤더 추가 │
└──────────────────────────────────────────┘
↓
백엔드 서버
관리자 브라우저
↓
┌──────────────────────────────────────────┐
│ React UI (포트 81) │
│ - SPA 렌더링 │
│ - TanStack Query 상태 관리 │
└──────────────────────────────────────────┘
↓ (API 요청)
┌──────────────────────────────────────────┐
│ Go API (포트 8080) │
│ - JWT 인증 │
│ - TOTP 2FA 검증 │
│ - 비즈니스 로직 │
└──────────────────────────────────────────┘
↓
┌──────────────────────────────────────────┐
│ 데이터 레이어 │
│ PostgreSQL: 설정, 로그, 인증서 │
│ Valkey: 캐시, 차단 목록, 세션 │
└──────────────────────────────────────────┘
↓
┌──────────────────────────────────────────┐
│ Nginx 설정 적용 │
│ - conf.d/ 파일 생성 │
│ - nginx -s reload │
└──────────────────────────────────────────┘
대용량 로그 데이터를 효율적으로 관리하기 위해 월별 파티셔닝을 사용합니다.
┌─────────────────────────────────────────┐
│ Docker Network │
│ (npg-network, bridge) │
│ │
│ api ◄──► db │
│ ▲ │
│ └───► valkey │
│ ▲ │
│ └──────────► ui │
│ │
└─────────────────────────────────────────┘
│ (nginx는 호스트 네트워크 모드)
▼
nginx (호스트 네트워크) ──► api
호스트 포트: 80, 443 (nginx), 81 (ui)