Estamos falando de 1 a 3 servidores front-end no total, não um grande farm de servidores com balanceamento de carga entre as camadas?
Colocar o nginx na frente do Vanish permite que você faça a compactação HTTP em tempo real. Essa é uma prática recomendada de desempenho, mas pode ser dispensada. (O conteúdo no Varnish geralmente é mantido descompactado, para que o ESI Inclui trabalho e, assim, você não precisa lidar com várias versões em cache do mesmo objeto, dependendo da correspondência do cabeçalho / navegador Vary.)
Em relação ao nginx no servidor de aplicativos - o Apache com mod_wsgi não é a maneira recomendada e mais comum de implantar novas instalações do Django hoje em dia? Não estou ciente de um motivo convincente para usar o nginx / fastcgi sobre o Apache / mod_wsgi para Django; mas você deve obter conselhos de um especialista em Django.
Quanto ao Varnish ter recursos atraentes de balanceamento de carga que o nginx não possui, não vejo o que são? O verniz possui balanceamento aleatório e round-robin. O nginx possui round-robin, IP do cliente e hash consistente - não vejo um benefício significativo para o Varnish? É a atualização graciosa da configuração do VCL ou do Varnish ou algo mais?
Para uma pequena configuração de servidor de 1 a 3, acho que eu faria
Verniz -> Apache / mod_wsgi / Django
ou talvez
Squid -> Apache / mod_wsgi / Django
e ignore a compactação HTTP por simplicidade, a menos que a largura de banda seja cara.
Atualizar:
Graham Dumpleton escreveu um comentário valioso abaixo. Ele menciona uma configuração muito comum, por exemplo, um blog em um VPS ou um pequeno web farm sem cache:
nginx -> Apache / mod_wsgi / Django
Esta é uma solução muito boa, por alguns motivos:
- Configuração simples
- O nginx, que possui alta velocidade e sobrecarga mínima, lida com a veiculação estática de arquivos e a conexão com o navegador mantida ativa.
- O Django roda no excelente mod_wsgi de Graham Dumpleton, a plataforma recomendada para o Django.
A razão pela qual não mencionei isso inicialmente é que o OP parecia exigir o Varnish, uma solução de cache de alto desempenho. A combinação nginx / Apache / mod_wsgi não pode fazer cache com um nível de desempenho e flexibilidade que corresponda ao Varnish.
Você pode usar o nginx sem verniz para proxy e armazenar em cache o conteúdo.
fonte
Estou usando Nginx, Varnish e Apache / mod_wsgi / Django com sucesso. Comecei com a seguinte configuração:
Depois que comecei a ver uma carga significativa no Apache, adicionei o Varnish:
Eu uso o Nginx como um tipo de "roteador de URL". Os pedidos de administração do Django são enviados diretamente do Nginx para o Apache. As solicitações do cliente são enviadas do Nginx para o Varnish, que armazena em cache as solicitações do Apache e também serve itens "agraciados" do cache se os servidores de aplicativos não estiverem disponíveis.
Meu servidor Nginx também atende a determinados conteúdos estáticos diretamente (por exemplo, imagens, CSS e arquivos javascript).
Em geral, o desempenho tem sido excelente. Notei algumas advertências que devo mencionar:
fonte
Estou usando o Nginx-> Varnish-> uWSGI-> Django
fonte