Nginx Reverse Proxy Apache Benefícios

2

Alguém pode explicar por que colocar o nginx e o proxy reverso do Apache é mais rápido do que o simples Apache?

Eu já movi todos os meus arquivos estáticos para o s3 (ouvi dizer que o nginx é melhor em manipular arquivos estáticos), então, que outros benefícios ele tem?

    
por vonhogen 28.05.2011 / 16:14

2 respostas

4

O Apache tem dois modelos para lidar com conexões de clientes: worker e prefork. O Prefork é muito pesado em recursos (requer um processo completo para cada conexão do cliente), mas ainda é comumente usado com o PHP. O Worker é muito melhor do ponto de vista de recursos, mas ainda requer um thread dedicado por conexão de cliente.

O Nginx usa apenas um pequeno número de threads (geralmente apenas um thread por cpu) para lidar com todas as conexões do cliente. Isso o torna mais leve que o Apache e permite escalar e lidar com dezenas de milhares de conexões em uma única máquina.

No entanto, isso não o torna "melhor" que o Apache para todos os casos. Geralmente, é melhor que o Apache para servir arquivos estáticos, mas não conteúdo dinâmico gerado a partir de um aplicativo da Web (ou seja, você não deseja que centenas de conexões sejam bloqueadas enquanto uma das solicitações estiver fazendo uma consulta ao banco de dados). É por isso que você ainda precisa do fastcgi, uWSGI, passageiro ou até mesmo do apache + mod_wsgi + passenger para transferir o trabalho de aplicativos da Web para o servidor de aplicativos. Esses processos de back-end ainda usarão um thread por solicitação, mas, pelo menos, apenas para as solicitações que precisam de conteúdo dinâmico.

Assim, os principais motivos pelos quais o nginx + apache é mais rápido que o apache direto são (A) arquivos estáticos manipulados com muito mais eficiência, (B) carga reduzida em recursos (pesados) do apache.

Finalmente, para a parte "outros benefícios" da sua pergunta: o nginx também lida com conexões SSL mais rápido que o Apache, embora, novamente, isso não o torne melhor para todos os casos. Por exemplo, se você precisar de autenticação detalhada usando certificados do lado do cliente, ainda precisará do Apache para lidar com o SSL. Se você está apenas executando páginas sobre HTTPS para a criptografia, então o nginx lhe dará um pouco de aumento de velocidade.

    
por 07.06.2011 / 22:12
1

Simplesmente, o Apache é excelente para processamento de conteúdo dinâmico, mas você precisa aguardar sua resposta.

O proxy invertido (colocando o Nginx entre o usuário e o Apache) economiza seu tempo porque o apache está respondendo ao 127.0.0.1 que está na mesma máquina como se você estivesse acessando o host local.

Assim, o cliente Apache sempre será Nginx e a resposta do apache é um conteúdo estático que fará com que você obtenha o melhor do Nginx, já que é mais rápido que o apache ao servir esse conteúdo.

Você pode conferir este diagrama

    
por 29.05.2013 / 01:13