Зачем мне нужно использовать веб-сервер, промежуточное программное обеспечение и т. Д. Для простого приложения Flask?

Я разрабатываю простое приложение MVP, и пришло время развернуть его на моем рабочем сервере для более тщательного внешнего тестирования. Он никогда не получит тяжелую нагрузку на трафик, мне просто нужна небольшая группа пользователей для тестирования.

Теперь я всегда шел с тремя слоями. Nginx / Apache> Guncicorn / CherryPy / etc> Flask / Django / Pyramid / Bottle / etc

Я ЗНАЮ, что это убедительная мудрость. Но я никогда не собирался спрашивать, почему. Для чего я все это настраиваю?

В документах Django говорится об включенном dev-сервере:

Мы включили это в Django, чтобы вы могли быстро развивать вещи, не имея необходимости заниматься настройкой производственного сервера, такого как Apache, пока вы не будете готовы к производству.

Теперь самое время отметить: не используйте этот сервер ничем, похожим на производственную среду. Он предназначен только для использования при разработке. ( Мы занимаемся созданием веб-фреймворков, а не веб-серверов ).

Два преимущества Apache / Nginx над dev-сервером сразу приходят в голову:

  • Сервер Django dev не разработан с учетом безопасности. Apache / Nginx, предназначенные для работы через сеть, имели (и продолжают прилагать) усилия по поиску / устранению уязвимостей, которых у Django-dev-сервера просто не было.
  • Множество запросов, которые вы подаете, будут статическими (изображения, JS, CSS). Nginx и Apache будут намного эффективнее обслуживать эти активы, чем сервер, написанный на Python.