[실습] 03. NGINX 리버스 프록시로 Django 배포
2026. 1. 4. 20:16

03. NGINX 리버스 프록시로 Django 배포: 동적/정적 분리 운영

nginx diagram
구성 개념도

핵심 정리

1) 운영이 쉬운 배포 패턴: 정적/동적 분리

  • 정적 파일(CSS/JS/이미지)은 NGINX가 직접 제공하면 빠르고 단순합니다.
  • 동적 요청proxy_pass로 앱(예: Django+Gunicorn) 컨테이너로 넘깁니다.

2) proxy 설정에서 꼭 챙길 헤더

  • 앱이 실제 클라이언트 정보를 알 수 있도록 X-Forwarded-For, X-Forwarded-Proto를 넘겨주는 구성이 자주 사용됩니다.
  • 이 부분이 빠지면, 앱 로그에 클라이언트 IP가 모두 프록시 IP로 찍히거나, HTTPS 뒤에서 리다이렉트가 꼬이는 문제가 생길 수 있습니다.
upstream django_upstream {
  server django:8000;
}

server {
  listen 80;
  server_name example.local;

  # 정적 파일
  location /static/ {
    alias /srv/static/;
    expires 7d;
  }

  # 동적 요청
  location / {
    proxy_pass http://django_upstream;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
운영 체크리스트
  • 정적 파일 경로는 root가 아닌 alias가 더 직관적인 경우가 많습니다(경로 합치기 실수 방지).
  • 프록시 타임아웃(업스트림 지연)과 바디 크기 제한(업로드)을 서비스 특성에 맞게 조정해 두면 장애가 줄어듭니다.
  • Django라면 ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS 등 ‘프록시 뒤’ 설정도 같이 점검하시는 것을 권장드립니다.

참고 링크

헷갈리기 쉬운 개념/지시어는 공식 문서와 RFC/레퍼런스를 함께 보시면 이해가 빨라집니다.