Existem muitos tutoriais sobre como configurar o nginx para cooperar com o uWGSI quando eu quiser implantar o aplicativo Django.
Mas por que preciso do nginx neste kit? O próprio uWSGI pode servir aplicativos WSGI Python, pode servir arquivos estáticos, também pode fazer SSL. O que o nginx pode fazer que o uWSGI não pode?
Respostas:
Você não
Essa é a resposta simples, de qualquer maneira - você não precisa dela. O próprio uWSGI é um servidor capaz.
No entanto, outros servidores como o nginx existem há mais tempo e são (provavelmente de qualquer maneira) mais seguros, além de ter recursos adicionais não suportados pelo uWSGI - por exemplo, melhor gerenciamento de recursos estáticos (por meio de qualquer combinação de Expira ou E-Tag cabeçalhos, compactação gzip, gzip pré-compactado etc.) que podem reduzir significativamente a carga do servidor e da rede; Além disso, um servidor como o nginx na frente do seu aplicativo Django também pode implementar o cache do seu conteúdo dinâmico, ajudando a reduzir a carga do servidor e até facilitando o uso de uma CDN (que normalmente não funciona bem com conteúdo dinâmico). ) Você pode ir além e ter o nginx em um servidor completamente separado, revertendo as solicitações de proxy de conteúdo dinâmico para um cluster de servidores de aplicativos com balanceamento de carga enquanto lida com o próprio conteúdo estático.
Por exemplo, meu blog (enquanto é o WordPress, tem o nginx à frente) é ajustado para armazenar em cache postagens por 24 horas e para armazenar em cache as páginas de índice por 5 minutos; embora eu não veja tráfego suficiente para que isso realmente importe a maior parte do tempo, ele ajuda meu minúsculo VPS a resistir ao aumento ocasional que poderia derrubá-lo - como o grande aumento de tráfego quando um dos meus artigos foi escolhido por um twitterer com muitos milhares de seguidores, muitos dos quais re-twittaram para seus milhares de seguidores.
Se eu estivesse executando um servidor uWSGI "vazio" (e supondo que fosse um site Django, em vez de WordPress), ele pode ter resistido muito bem - ou pode ter travado e queimado, me custando visitantes perdidos . Ter o nginx na frente dele para lidar com essa carga pode realmente ajudar.
Tudo o que foi dito, se você está executando um pequeno site que não recebe muito tráfego, não há necessidade real de nginx ou qualquer outra coisa - basta usar o uWSGI por conta própria, se é isso que você deseja fazer. Por outro lado, se você vir muito tráfego ... bem, você ainda pode querer o uWSGI, mas pelo menos considere algo à sua frente para ajudar no carregamento. Na verdade, você realmente deve testar a carga de configurações diferentes com o site finalizado para determinar o que funciona melhor para você sob a carga esperada e usar o que quer que seja.
fonte
Na IMO, se você colocar seu site na Internet em vez de no Lab, poderá ver a diferença.
Imagine um usuário de outro país com navegador aberto de baixa velocidade de rede para acessar seu site. O uWSGI manipulará essa conexão HTTP em um encadeamento. Esse encadeamento pode demorar muito tempo para aguardar uma solicitação HTTP completa devido à baixa velocidade da rede. Se o tamanho do seu pool de threads for 100, imagine 100 usuários tão lentos, o que acontecerá? Nenhuma thread ociosa para lidar com outra solicitação de HTTP.
Mas as coisas são bem diferentes para o Nginx. O Nginx foi projetado no 'Padrão do reator'. Você pode pesquisar no Google 'Reactor Pattern' para ver como funciona. Em resumo, a conexão de velocidade lenta não afeta a manipulação de outras solicitações de HTTP.
fonte