Nginx의 역할과 기능
1. Reverse Proxy (리버스 프록시)
[브라우저] → [Nginx:80] → [FastAPI:8000]
역할:
- 클라이언트의 요청을 FastAPI 서버로 전달
- FastAPI 서버의 응답을 클라이언트로 전달
- 내부 서버(FastAPI)를 외부에 직접 노출하지 않음
설정 예시:
upstream fastapi {
server fastapi:8000; # Docker 컨테이너 이름
}
location / {
proxy_pass http://fastapi;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
2. Load Balancer (로드 밸런서)
여러 FastAPI 인스턴스가 있을 때 요청을 분산:
upstream fastapi {
server fastapi1:8000;
server fastapi2:8000;
server fastapi3:8000;
}
3. Static File Server (정적 파일 서버)
location /static/ {
alias /usr/share/nginx/html/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
효과:
- CSS, JS, 이미지 파일을 Nginx가 직접 서빙
- FastAPI 서버 부하 감소
- 빠른 정적 파일 전달
4. Security Headers (보안 헤더)
add_header X-Frame-Options "SAMEORIGIN" 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;
보안 기능:
- XSS 공격 방어
- 클릭재킹 방어
- MIME 타입 스니핑 방지
5. Rate Limiting (속도 제한)
# 존 정의
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=auth:10m rate=5r/m;
# 적용
location ~ ^/(login|signup|logout) {
limit_req zone=auth burst=2 nodelay; # 5회/분 제한
}
location / {
limit_req zone=general burst=20 nodelay; # 10회/초 제한
}
효과:
- DDoS 공격 방어
- 무차별 로그인 시도 방지
- 서버 리소스 보호
6. Compression (압축)
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/json;
효과:
- 네트워크 대역폭 절약
- 페이지 로딩 속도 향상
- 사용자 경험 개선
7. SSL/TLS Termination (SSL 종료)
server {
listen 443 ssl http2;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/private.key;
location / {
proxy_pass http://fastapi; # 내부는 HTTP 통신
}
}
역할:
- HTTPS 암호화/복호화 처리
- FastAPI는 HTTP만 처리하면 됨
- SSL 인증서 관리
8. Caching (캐싱)
location /static/ {
expires 30d; # 30일 캐시
}
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 1h; # 1시간 캐시
}
9. Health Check & Failover
upstream fastapi {
server fastapi1:8000 max_fails=3 fail_timeout=30s;
server fastapi2:8000 backup; # 백업 서버
}
내 프로젝트에서의 Nginx 역할
현재 설정 분석:
1. 포트 80에서 요청 받음
2. 정적 파일 (/static/) 직접 서빙
3. 인증 엔드포인트 특별 관리 (Rate Limiting)
4. 모든 요청을 FastAPI:8000으로 프록시
5. 보안 헤더 자동 추가
6. Gzip 압축 적용
장점:
- 성능: 정적 파일을 Nginx가 직접 처리
- 보안: Rate Limiting, 보안 헤더
- 확장성: 여러 FastAPI 인스턴스로 확장 가능
- 운영: 로그 관리, 모니터링
FastAPI만 사용했을 때와의 차이:
FastAPI만:
[브라우저] → [FastAPI:8000]
Nginx + FastAPI:
[브라우저] → [Nginx:80] → [FastAPI:8000]
Nginx가 웹 서버의 역할을, FastAPI가 애플리케이션 서버의 역할을 각각 담당하여 웹을 통해 보안토큰이 전송될 필요없이 효율적인 구조를 가집니다.
'Tech & IT > 개발환경세팅하기' 카테고리의 다른 글
DB 접근 N+1 쿼리 문제란 무엇이며 해결방법은? (0) | 2025.09.11 |
---|---|
docker-compose down/up 만할지 build까지 해야할지 (0) | 2025.09.11 |
클로드 코드 사용량이 많아지다보면 느려터지는데 원인 및 해결하기 (0) | 2025.09.10 |
CORS가 필요한 경우 vs 불필요한 경우 (0) | 2025.09.10 |
파이썬으로 유튜브 데이터 얻으려고 YouTube Data API v3 (0) | 2025.09.10 |