Многие развертывания приложений Django над Amazon EC2 используют HTTP-серверы NGINX и Gunicorn.
Мне было интересно, что они на самом деле делают и почему оба используются параллельно. Какова цель их запуска параллельно?
Многие развертывания приложений Django над Amazon EC2 используют HTTP-серверы NGINX и Gunicorn.
Мне было интересно, что они на самом деле делают и почему оба используются параллельно. Какова цель их запуска параллельно?
Они не используются параллельно. NGINX - это обратный прокси-сервер. Он первый в очереди. Он принимает входящие соединения и решает, куда они должны идти дальше. Он также (обычно) обслуживает статические носители, такие как CSS, JS и изображения. Он также может выполнять другие функции, такие как шифрование через SSL, кеширование и т.д.
Gunicorn - следующий уровень и является сервером приложений . NGINX видит, что входящее соединение для www.domain.com
и знает (через файлы конфигурации), что оно должно передать это соединение на Gunicorn. Gunicorn - сервер WSGI, который в основном представляет собой:
простой и универсальный интерфейс между веб-серверами и веб-приложениями или фреймворками
Задача Gunicorn - управлять и запускать экземпляр Django (аналогично использованию django-admin runserver
во время разработки)
В отличие от этой настройки используется Apache с модулем mod_wsgi
. В этой ситуации сервер приложений фактически является частью Apache, работающим как модуль.
Nginx и Gunicorn не используются параллельно.
На следующих диаграммах показано, как взаимодействуют nginx и Gunicorn.