В чем смысл uWSGI?
Я смотрю на спецификация WSGI и я пытаюсь выяснить, как сервера, как на uwsgi вписывается в картину. Я понимаю, что смысл спецификации WSGI заключается в том, чтобы отделить веб-серверы, такие как nginx, от веб-приложений, таких как то, что вы пишете с помощью колбы. Я не понимаю, для чего нужен uWSGI. Почему nginx не может напрямую вызвать мое приложение Flask? Не может фласк говорить WSGI непосредственно к нему? Почему uWSGI нужно вставать между их?
в спецификации WSGI есть две стороны: сервер и веб-приложение. С какой стороны на uwsgi на?
3 ответов
ладно, кажется, я понял.
почему nginx не может напрямую вызвать мое приложение колбы?
, потому что nginx
не поддерживает спецификацию WSGI. Технически nginx может реализовать WSGI
spec, если они хотели, они просто не имеют.
в этом случае нам нужен веб-сервер, который реализует спецификацию, что и является uWSGI
сервер для.
отметим, что uWSGI
является полноценным HTTP-сервером, который может и хорошо работает сама по себе. Я использовал его в этом качестве несколько раз, и он прекрасно работает. Если вам нужна супер высокая пропускная способность для статического контента, то у вас есть возможность вставлять nginx
перед uWSGI
сервер. Когда вы это сделаете, они будут общаться по протоколу низкого уровня, известного как uwsgi
.
"что?! Еще одна вещь под названием uwsgi?!" вы спрашиваете. Да, это сбивает с толку. При ссылке uWSGI
вы говорите о сервере http. Когда вы поговорим о uwsgi
(все строчные буквы) вы говорите о бинарный протокол что uWSGI
сервер использует для общения с другими серверами, как nginx
. Они выбрали плохое имя.
для всех, кто заинтересован, я написал статья в блоге об этом с большей конкретикой, немного истории и некоторые примеры.
традиционный веб-сервер не понимает или не имеет никакого способа запуска приложений Python. Вот почему сервер WSGI входит. С другой стороны, Nginx поддерживает обратный прокси для обработки запросов и передачи ответов для серверов Python WSGI.
эта ссылка может помочь вам: https://www.fullstackpython.com/wsgi-servers.html
NGINX в этом случае работает только как обратный прокси, он получает запросы и прокси их на сервер приложений, который будет UWSGI.
сервер UWSGI отвечает за загрузку приложения Flask с помощью интерфейса WSGI. Вы действительно можете заставить UWSGI слушать непосредственно запросы из интернета и удалить NGINX, если хотите, хотя он в основном используется за обратным прокси.
с docs:
на uwsgi поддерживает несколько методов интеграции с веб-серверами. Он также способен обслуживать HTTP-запросы сам по себе.
WSGI - это просто спецификация интерфейса, в простых терминах, она сообщает вам, какие методы вы должны реализовать для передачи запросов и ответов между сервером и приложением. При использовании фреймворков, таких как Flask или Django, это обрабатывается самой фреймворком.
другими словами, WSGI-это в основном контракт между python приложения (колба, Django и т. д.) и веб-серверы (UWSGI, Gunicorn и т. д.). Преимущество заключается в том, что вы можете изменить веб-серверы с небольшими усилиями, потому что вы знаете, что они соответствуют спецификации WSGI, которая на самом деле является одной из целей, как указано в PEP-333.
Python в настоящее время может похвастаться широким спектром фреймворков веб-приложений, таких как Zope, Quixote, Webware, SkunkWeb, PSO и Twisted Web-чтобы назвать только несколько [1]. Этот широкий выбор можно проблема для новых пользователей Python, потому что, вообще говоря, их выбор веб-фреймворка ограничит их выбор используемых веб-серверов, и наоборот