Согласно официальным документам uWSGI: веб-сервер обращен к внешнему миру. Он может обслуживать файлы (HTML, изображения, CSS и т. Д.) Непосредственно из файловой системы. Однако он не может напрямую взаимодействовать с приложениями Django; ему нужно что-то, что будет запускать приложение, отправлять ему запросы от веб-клиентов (например, браузеров) и возвращать ответы.
Эту работу выполняет интерфейс шлюза веб-сервера - WSGI. WSGI - это стандарт Python. UWSGI - это реализация WSGI.
Означает ли это, что uWSGI необходим, если я хочу развернуть приложение Django на веб-сервере?
Краткий ответ: вам нужна какая-то форма отдельного сервера django, да.
Длинный ответ: сам nginx может обслуживать только статические файлы. Он может читать любой файл на вашем сервере и отправлять его через HTTP, но это все. Сам по себе он не говорит на PHP, Python, Java, ... Если вы укажете nginx на файл python, он просто обработает его как текстовый файл и отобразит исходный код, потому что он не знает, что еще с ним делать.
Динамические веб-сайты работают так:
Чтобы пункт 2 работал, вам нужно «научить» nginx обрабатывать определенные файлы / URL-адреса по-разному. Вы в основном говорите, что все, что заканчивается на .php, должно быть перенаправлено на сервер php. То же самое и с приложениями django. Вам нужно указать nginx перенаправить определенные шаблоны URL-адресов на сервер django, который затем запускает скрипты python для генерации HTML.
uWSGI - это один сервер Django, но их несколько.