Почему runserver нельзя использовать в продакшне

В Django уже есть встроенный веб-сервер — runserver. Его используют для быстрой отладки во время разработки. Но сами же разработчики Django прямым текстом пишут о том, что использовать в продакшне его не стоит:

DO NOT USE THIS SERVER IN A PRODUCTION SETTING. It has not gone through security audits or performance tests.

Gunicorn быстрее и заботится о безопасности. Его можно использовать в продакшне, и даже ребята из Django советуют это делать.

Больше деталей

Каждая страничка сайта генерирует десятки запросов к серверу. Браузеру помимо HTML нужны файлы CSS, JS и картинки. Каждый файл – это отдельный запрос к серверу. Если всё сложить, то наберётся их с несколько десятков. И так для каждой страницы сайта.

Кроме общего большого количества запросов есть ещё и вторая проблема. Файл не всегда укладывается по размеру в один TCP-пакет, и веб-сервер вынужден отправлять его клиенту порциями, по-частям. Серверу приходится либо держать все файлы в памяти до завершения закачки и потреблять гигабайты RAM, либо читать файлы из файловой системы так же порциями. Задача эта не то, чтобы супер-сложная, но требует повышенной осторожности.

Браузеры и прочие клиенты нынче умные и не хотят скачивать лишнего. На своей стороне они держат кэш и в запросе сообщают вместе с названием файла и таймстемп момента, когда скачивали его последний раз. Получается, что веб-сервер также должен следить за файловой системой и сверять таймстемпы. Если файл не менялся, то сервер отвечает клиенту статусом 304 Not Modified.

На этом функциональность веб-сервера не заканчивается. Надо ещё научиться использовать несколько CPU параллельно на одном сервере, добавить поддержку HTTPS и HTTP/2. Причём всё это должно работать надёжно и точно следовать стандартам.

Получаем сочетание сразу из трёх трудно выполнимых требований:

  • богатый функционал
  • высокая производительность
  • защита от атак злоумышленников

Достичь всего и сразу трудно. Django runserver такое не тянет. Выберите другой надёжный и проверенный веб-сервер. Обратите внимание на Nginx.


Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.