Nginx + Django: почему не стоит отдавать Django напрямую Когда начинал с Django, долго не понимал зачем нужен nginx - ведь runserver прекрасно отдает контент Проблемы прямого подключения к Django: - Один процесс обслуживает все запросы (медленно) - Статические файлы обрабатывает Python (неэффективно) - Нет защиты от медленных клиентов - Сложно настроить SSL и кэширование Nginx как reverse proxy решает все сразу: server { listen 80; server_name mysite.com; # Статика отдается nginx напрямую location /static/ { alias /var/www/mysite/static/; expires 30d; } # API запросы проксируются в Django location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } Что получаем: - Nginx отдает статику в разы быстрее Python - Защита от медленных соединений - Компрессия gzip из коробки # Запускаем Django через gunicorn с несколькими воркерами gunicorn --workers 4 --bind 127.0.0.1:8000 myproject.wsgi Дополнительные плюсы: - Rate limitin