NGINX en este caso solo funciona como un proxy inverso y procesa archivos estáticos, no archivos dinámicos , recibe las solicitudes y las envía al servidor de aplicaciones, que sería UWSGI.
El servidor UWSGI es responsable de cargar su aplicación Flask usando la interfaz WSGI. De hecho, puede hacer que UWSGI escuche directamente las solicitudes de Internet y eliminar NGINX si lo desea, aunque se usa principalmente detrás de un proxy inverso.
De los documentos :
uWSGI admite varios métodos de integración con servidores web. También es capaz de atender solicitudes HTTP por sí mismo.
WSGI es solo una especificación de interfaz, en términos simples, le dice qué métodos deben implementarse para pasar solicitudes y respuestas entre el servidor y la aplicación. Cuando se utilizan marcos como Flask o Django, esto lo maneja el marco mismo.
En otras palabras, WSGI es básicamente un contrato entre aplicaciones de Python (Flask, Django, etc.) y servidores web (UWSGI, Gunicorn, etc.). El beneficio es que puede cambiar los servidores web con poco esfuerzo porque sabe que cumplen con la especificación WSGI, que en realidad es uno de los objetivos, como se indica en PEP-333 .
Python actualmente cuenta con una amplia variedad de marcos de aplicaciones web, como Zope, Quixote, Webware, SkunkWeb, PSO y Twisted Web, por nombrar solo algunos 1 . Esta amplia variedad de opciones puede ser un problema para los nuevos usuarios de Python, porque en términos generales, su elección de marco web limitará su elección de servidores web utilizables y viceversa.