Sobes.tech
Назад к вопросам
Junior — Middle
69

Как взаимодействуют Django, Nginx и Gunicorn при развертывании веб-приложений?

Компании, где спрашивали
TechCore

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Django — это само веб-приложение, которое обрабатывает бизнес-логику и формирует ответы. Gunicorn выступает как WSGI-сервер и запускает Django-процесс, принимая запросы от веб-сервера. Nginx обычно стоит перед ним как reverse proxy: принимает внешние HTTP-запросы, отдает статику и перенаправляет динамические запросы в Gunicorn.

Определение:

При развертывании Django обычно не запускают напрямую через встроенный сервер, а используют связку из трех компонентов. Nginx принимает запросы от клиента, может обслуживать статические и медиа-файлы, а также балансировать и проксировать трафик. Gunicorn запускает Django-приложение и передает запросы в Python-код через WSGI.

Пример использования:

Типичная схема для продакшена: пользователь открывает сайт, запрос приходит в Nginx, тот отдает CSS/JS/картинки напрямую, а запросы к страницам и API пересылает в Gunicorn, который уже вызывает Django.

server {
    listen 80;
    server_name example.com;

    location /static/ {
        alias /var/www/app/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Пояснение кода:

Этот пример показывает роль Nginx как reverse proxy.

  1. listen 80 — Nginx принимает HTTP-запросы на 80 порту.
  2. server_name example.com — этот блок используется для домена example.com.
  3. location /static/ с alias — Nginx сам отдает статические файлы из файловой системы, не нагружая Django.
  4. location / — все остальные запросы передаются в Gunicorn по адресу 127.0.0.1:8000.
  5. proxy_set_header — заголовки помогают Django корректно видеть исходный хост, IP клиента и схему запроса.

Ключевые моменты:

  • Django отвечает за бизнес-логику, а не за прием трафика в продакшене.
  • Gunicorn — это приложение-сервер для Python/Django, работающее по WSGI.
  • Nginx обычно стоит спереди и выступает reverse proxy.
  • Статику и медиа-файлы выгодно отдавать через Nginx, а не через Django.
  • Такая схема лучше по производительности, стабильности и безопасности.
  • Важно настроить заголовки проксирования, чтобы Django корректно обрабатывал запросы.