Что такое Gunicorn и Nginx в двух словах

При размещении веб-приложения Python на продакшене вы не сможете обойтись без использования сервера WSGI и веб-сервера.

Gunicorn и Nginx - это самые надежные и популярные варианты таких приложений. Почему они используются в связке?

Nginx и Gunicorn работают вместе

Nginx принимает все запросы из Интернета. Он может обрабатывать их очень быстро и обычно настраивается так, чтобы пропускать только те запросы, которые действительно должны поступить в ваше веб-приложение. Остальные он блокирует.

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

Они составляют отличную команду! Каждый может сделать что-то, что другой не может. Давайте посмотрим на их сильные стороны подробно, и как они дополняют друг друга.

Nginx

Nginx - это веб-сервер, а если точнее то это HTTP-сервер и IMAP/POP3 прокси-сервер для UNIX-подобных платформ (FreeBSD и GNU/Linux). Он оптимизирован для всех вещей, которые должен делать веб-сервер. Для балансировки нагрузки, защита от DDoS-атак, работает как обратный прокси-сервер.

Под обратным проксированием обычно понимается процесс, в котором сервер, получающий запрос от клиента, не обрабатывает его полностью самостоятельно, а частично или целиком отправляет этот запрос для обработки другим (upstream) серверам. То есть, не перенаправляет клиента, а самостоятельно отправляет запрос и возвращает полученный ответ обратно клиенту.

Вот несколько вещей, в которых он делает свою работу очень хорошо:

  • Маршрутизация доменного имени (решает, куда должны отправляться запросы, или в случае ответа об ошибке)
  • Обслуживание статических файлов
  • Высокая скорость обработки множества запросов, поступающих одновременно
  • Общение с медленными клиентами
  • Направление запросов, которые должны быть динамическими в Gunicorn
  • Работа по SSL (здесь происходит https)
  • Экономия вычислительных ресурсов (процессор и память) по сравнению с кодом Python
  • И многое другое, если вы настроите это (балансировка нагрузки, кэширование и т. Д.)

Вещи, которые Nginx не может сделать:

  • Запуск веб-приложений Python
  • Перевести запросы в WSGI

Gunicorn

Как только Nginx решит, что конкретный запрос должен быть передан в Gunicorn (согласно правилам, по которым он был настроен), в работу вступает Gunicorn.

Gunicorn действительно хорош в том, что он делает! Он высоко оптимизирован и имеет множество удобных функций. В основном, его работа состоит из:

  • Запуск пула рабочих процессов / потоков (выполнение вашего кода!)
  • Переводит запросы, поступающие от Nginx, для совместимости с WSGI
  • Переведит ответы WSGI вашего приложения в правильные ответы HTTP
  • На самом деле вызывает код Python, когда приходит запрос
  • Gunicorn может общаться с различными веб-серверами

Что Gunicorn не может сделать для вас:

  • Не может работать с фронтендом
  • Не может поддерживать работу по SSL (без обработки https)
  • Не может обеспечить работу полноценного веб-сервера, как например Nginx

Gunicorn - только один из многих серверов WSGI. Вашему приложению не важно, какой веб сервер вы используете. Но Gunicorn - отличный выбор!

Что такое nginx?
NGINX — программное обеспечение, написанное для UNIX-систем. Основное назначение — самостоятельный HTTP-сервер, или, как его используют чаще, фронтенд для высоконагруженных проектов. Возможно использование NGINX как почтового SMTP/IMAP/POP3-сервера, а также обратного TCP прокси-сервера.
ПредметИнформатика
Что такое Gunicorn?

Gunicorn — автономный веб-сервер с обширной функциональностью, предоставленной в удобном виде. Он изначально поддерживает различные фреймворки и адаптеры, что делает его чрезвычайно простой в использовании прямой заменой для многих серверов разработки.

Технически Gunicorn работает подобно Unicorn, популярному веб-серверу приложений Ruby. Они оба используют так называемую pre-fork модель (это значит, что главный процесс управляет инициированными рабочими процессами различного типа, создает сокеты и соединения, и т.п.).

Особенности сервера Gunicorn

  • Запускает любое приложение (и фреймворк) WSGI Python.
  • Служит заменой серверам Paster/Pyramid (сервер разработки Django), web2py и т.п.
  • Поставляется с различными конфигурациями и типами процессов.
  • Автоматически управляет процессами.
  • Поддерживает HTTP/1.0 и HTTP/1.1 с помощью синхронных и асинхронных процессов.
  • Поддерживает SSL.
  • Расширяется с помощью специальных точек входа.
  • Поддерживает Python 2.6+ и 3.x.
ПредметИнформатика
Что такое SSH
SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.
ПредметИнформатика СложностьПростая
Как проверить, установлен ли Nginx

Напишете в консоле SSH следующую команду, она покажет версию NGINX

 nginx -v

Если NGINX установлен, то будет выведена его версия:

nginx version: nginx/1.10.3

Если нет, нужно установить NGINX.

УровеньВУЗ ПредметИнформатика СложностьПростая
Где расположен Nginx

Во FreeBSD NGINX располагается

/usr/local/etc/nginx

В Ubuntu, Debian NGINX располагается:

/etc/nginx

В ней располагается конфигурационный файл nginx.conf — основной конфигурационный файл nginx.

Чтобы добраться до него, выполняем команду в консоли

 nano /etc/nginx/nginx.conf

По умолчанию, файлы конфигураций конкретных сайтов располагаются в /etc/nginx/sites-enabled/

 cd /etc/nginx/sites-enabled/

или в /etc/nginx/vhosts/

 cd /etc/nginx/vhosts/
УровеньВУЗ ПредметИнформатика СложностьПростая
Читать по теме
Интересные статьи