NGINX dans ce cas, ne fonctionne que comme un proxy inverse, il reçoit les demandes et les doublures au serveur d'application, qui serait UWSGI.
Le UWSGI serveur est responsable du chargement de votre ballon d'application à l'aide de l'interface WSGI. Vous pouvez réellement faire de UWSGI écouter directement aux demandes de l'internet et de supprimer NGINX si vous le souhaitez, mais il est surtout utilisé derrière un reverse proxy.
À partir de la docs:
uWSGI prend en charge plusieurs méthodes d'intégration avec les serveurs web. Il est également capable de servir les requêtes HTTP par lui-même.
WSGI est juste une spécification d'interface, en termes simples, il vous indique quelles méthodes doivent être mises en œuvre pour le passage de requets et les réponses entre le serveur et l'application. Lors de l'utilisation de frameworks comme le ballon ou Django, c'est gérer par le cadre lui-même.
En d'autres termes, WSGI est essentiellement un contrat entre python applications (Flacon, Django, etc) et les serveurs web (UWSGI, Gunicorn, etc). L'avantage est que vous pouvez changer de serveurs web avec peu d'effort, parce que vous savez qu'ils respectent les WSGI cahier des charges, qui est en fait l'un des buts, comme indiqué dans le PEP-333.
Python actuellement se vante d'une large variété de frameworks d'applications web, telles que Zope, Quichotte, Webware, SkunkWeb, PSO, et Twisted Web, pour n'en nommer juste quelques-uns [1]. Cette grande variété de choix peut être un problème pour les nouveaux Python, parce que de manière générale, leur choix de framework web va limiter le choix de leurs utilisable serveurs web, et vice-versa