Nginx로 보안 리버스 프록시를 구축한 방법
Source: Dev.to
소개
역방향 프록시는 현대 웹 인프라에서 가장 강력한 구성 요소 중 하나입니다. 이는 사용자와 백엔드 서비스 사이에 위치하여 성능을 향상하고 보안 정책을 적용하며 트래픽을 제어할 수 있는 게이트키퍼 역할을 합니다.
이 가이드를 마치면 애플리케이션 앞에 배포할 수 있는 실용적인 설정을 갖추게 됩니다.
Reverse Proxy Architecture
높은 수준에서 리버스 프록시는 클라이언트와 백엔드 서버 사이에 위치합니다. 사용자가 애플리케이션 서버에 직접 접근하는 대신, 모든 요청이 먼저 프록시를 거칩니다.
Client
│
▼
Reverse Proxy (Nginx)
│
▼
Application ServerBenefits
- 내부 인프라 숨기기
- 보안 정책 중앙 집중화
- TLS를 한 곳에서 종료
- 트래픽 필터링 및 모니터링 추가
Example Scenario
Internet
│
▼
Nginx Reverse Proxy
├── API Server (Node.js)
├── Web App (React / Next.js)
└── Admin PanelSimple Reverse Proxy Configuration
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}What this does
- Accepts HTTP requests
- Forwards them to the backend application
- Preserves client IP information
속도 제한
공용 서비스는 종종 봇 트래픽, 스캐너 및 무차별 대입 공격에 직면합니다. 속도 제한은 클라이언트가 보낼 수 있는 요청 수를 제한함으로써 애플리케이션을 보호하는 데 도움이 됩니다.
속도 제한 영역 정의
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
}서버 블록에서 속도 제한 적용
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend_api;
}구성 세부 사항
- 제한: 초당 10 요청
- 버스트: 짧은 급증 허용
- 보호: API 엔드포인트를 남용으로부터 방어
속도 제한은 자동화된 스캐너와 무차별 대입 공격에 특히 효과적입니다.
보안 헤더
보안 헤더를 추가하면 브라우저와 사용자를 일반적인 웹 취약점으로부터 보호할 수 있습니다. Nginx에서 직접 설정할 수 있습니다.
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Content-Security-Policy "default-src 'self'";이 헤더들은 다음과 같은 공격을 방어하는 데 도움이 됩니다:
- 클릭재킹
- 콘텐츠 타입 스니핑
- 교차 사이트 스크립팅 (XSS)
- 데이터 유출
클라이언트 측 보호를 한층 강화하는 추가적인 레이어를 제공합니다.
로깅
로깅은 가시성과 사고 대응에 필수적입니다.
기본 로그 구성
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;사용자 정의 로그 형식
log_format security_log '$remote_addr - $request - $status - $http_user_agent';
access_log /var/log/nginx/security.log security_log;로그에서 유용한 데이터
- 클라이언트 IP
- 요청 경로
- HTTP 상태 코드
- 사용자 에이전트
- 요청 타이밍
로그는 종종 자동 스캔 및 공격 시도가 엔드포인트에 도달하는 것을 드러냅니다.
추가 모범 사례
HTTPS를 TLS와 함께 사용하도록 활성화
불필요한 HTTP 메서드 비활성화
서버 버전 정보 숨기기
server_tokens off;관리자 엔드포인트 제한
업스트림 상태 검사 사용
이러한 관행은 역방향 프록시를 공격으로부터 더욱 견고하게 보호합니다.
결론
리버스 프록시는 단순한 트래픽 라우터 그 이상입니다—애플리케이션 앞에 강력한 보안 레이어로 작동할 수 있습니다. 몇 가지 Nginx 설정만으로 다음을 구현할 수 있습니다:
- 트래픽 제어
- 보안 헤더
- 요청 로깅
- 기본 공격 완화
이러한 보호 조치는 자동화된 공격에 대한 노출을 크게 줄여줍니다. 바로 사용할 수 있는 보안 레이어를 원한다면 SafeLine WAF와 같은 프로젝트가 이러한 보호 기능을 바로 제공합니다.