Por que preciso do nginx quando tenho o uWSGI?

52

Existem muitos tutoriais sobre como configurar o nginx para cooperar com o uWGSI quando eu quiser implantar o aplicativo Django.

Mas por que eu 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 consegue?

    
por user983447 23.04.2014 / 16:44

2 respostas

47

Você não faz isso.

Essa é a resposta simples, de qualquer forma - você não precisa . O uWSGI é um servidor capaz.

No entanto, outros servidores como o nginx existem há mais tempo e são (provavelmente, pelo menos) 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 Expires ou Cabeçalhos E-Tag, 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 armazenamento em cache de seu conteúdo dinâmico, ajudando a reduzir a carga do servidor e até mesmo ajudando a facilitar o uso de um CDN (que normalmente não se dá bem com conteúdo dinâmico) ). Você poderia até mesmo ir mais longe e ter o nginx em um servidor completamente separado, invertendo as solicitações de proxy para conteúdo dinâmico em um cluster com balanceamento de carga de servidores de aplicativos enquanto manipula o próprio conteúdo estático.

Por exemplo, meu blog (enquanto é o WordPress, ele tem o nginx na frente dele) é ajustado para armazenar em cache as postagens por 24 horas e para armazenar páginas de índice em cache por 5 minutos; enquanto eu não vejo tráfego suficiente para que isso realmente importe a maior parte do tempo, isso ajuda o meu pequeno VPS a enfrentar a onda ocasional que poderia derrubá-lo - como a grande onda de tráfego quando um dos meus artigos foi escolhido por um Twitterer com muitos milhares de seguidores, muitos dos quais o reenviam para seus milhares de seguidores.

Se eu estivesse rodando um servidor uWSGI "vazio" (e supondo que fosse um site do Django, ao invés do WordPress), ele poderia ter resistido muito bem - ou pode ter sido quebrado e queimado, me custando em visitantes perdidos. Ter o nginx na frente dele para lidar com essa carga pode realmente ajudar.

Tudo o que foi dito, se você está apenas executando um pequeno site que não verá 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ê quer Faz. Por outro lado, se você vir muito tráfego ... bem, você ainda pode querer usar o uWSGI, mas você deve pelo menos considerar algo na frente para ajudar na carga. Na verdade, você deve realmente testar diferentes configurações de carga com o site finalizado para determinar o que funciona melhor para você sob sua carga esperada e usar o que estiver acabando.

    
por 23.04.2014 / 17:25
1

IMO, se você colocar seu site na Internet em vez de no Lab, talvez veja a diferença.

Imagine um usuário de outro país com um navegador da web de velocidade de rede baixa para acessar seu website. O uWSGI irá lidar com essa conexão HTTP em um thread. Esse thread pode gastar muito tempo para aguardar uma solicitação Http completa devido à baixa velocidade da rede. Se o tamanho do pool de threads for 100, imagine 100 usuários assim, o que acontecerá? Nenhum encadeamento inativo para manipular outras solicitações HTTP.

Mas coisas bem diferentes para o Nginx. Nginx é projetado em 'Padrão de Reator'. Você poderia google 'Padrão de Reator' para ver como funciona. Em suma, a conexão de baixa velocidade não afeta a manipulação de outras solicitações HTTP.

    
por 26.05.2015 / 11:45