Ok, acho que entendi agora.
Por que o nginx não pode chamar diretamente meu aplicativo Flask?
Porque nginx
não suporta a especificação WSGI. Tecnicamente, o nginx poderia implementar a WSGI
especificação se quisesse, mas não o fez.
Sendo esse o caso, precisamos de um servidor da web que implemente a especificação, que é para que serve o uWSGI
servidor.
Observe que uWSGI
é um servidor http completo que pode funcionar bem por conta própria. Usei-o nesta capacidade várias vezes e funciona muito bem. Se você precisar de uma taxa de transferência super alta para conteúdo estático, terá a opção de permanecer nginx
na frente do seu uWSGI
servidor. Quando você fizer isso, eles se comunicarão por meio de um protocolo de baixo nível conhecido como uwsgi
.
"O que o quê ?! Outra coisa chamada uwsgi ?!" você pergunta. Sim, é confuso. Quando você faz referência, uWSGI
está falando sobre um servidor http. Quando você fala sobre uwsgi
(em letras minúsculas), você está falando sobre um protocolo binário que o uWSGI
servidor usa para se comunicar com outros servidores nginx
. Eles escolheram um nome ruim neste.
Para quem estiver interessado, escrevi um artigo no blog sobre o assunto com mais detalhes, um pouco de história e alguns exemplos.
NGINX, neste caso, funciona apenas como um proxy reverso e renderiza arquivos estáticos, não os arquivos dinâmicos , ele recebe as solicitações e os encaminha para o servidor de aplicativos, que seria UWSGI.
O servidor UWSGI é responsável por carregar seu aplicativo Flask usando a interface WSGI. Na verdade, você pode fazer o UWSGI ouvir diretamente as solicitações da Internet e remover o NGINX se desejar, embora seja usado principalmente por trás de um proxy reverso.
Dos documentos :
WSGI é apenas uma especificação de interface, em termos simples, diz a você quais métodos devem ser implementados para passar solicitações e respostas entre o servidor e o aplicativo. Ao usar frameworks como Flask ou Django, isso é tratado pelo próprio framework.
Em outras palavras, WSGI é basicamente um contrato entre aplicativos python (Flask, Django, etc) e servidores web (UWSGI, Gunicorn, etc). A vantagem é que você pode alterar os servidores da web com pouco esforço, porque você sabe que eles estão em conformidade com a especificação WSGI, que na verdade é um dos objetivos, conforme declarado no PEP-333 .
fonte
Um servidor web tradicional não entende ou não tem como executar aplicativos Python. É por isso que o servidor WSGI entra. Por outro lado, o Nginx oferece suporte ao proxy reverso para lidar com solicitações e devolver respostas para servidores WSGI Python.
Este link pode ajudá-lo: https://www.fullstackpython.com/wsgi-servers.html
fonte
Em termos simples, pense em uma analogia onde você está executando um aplicativo CGI ou PHP com o servidor da web Nginx. Você usará os respectivos manipuladores como php-fpm para executar esses arquivos, uma vez que o servidor web, em sua forma nativa, não processa esses formatos.
fonte