Apache vs Nginx

29

Eu tenho investigado as diferenças entre o Apache e o Nginx recentemente e estou confuso sobre o que devo escolher.

Eu fiz algumas pesquisas, mas não há uma comparação definitiva entre as duas e fiquei me perguntando se alguém aqui poderia dar sua opinião sobre as diferenças entre os dois.

Meu conhecimento atual me permite entender que o mod_php é mais rápido e seguro que o fastcgi, entretanto o Apache é muito pior quando se trata de conexões simultâneas e consumo de memória.

Meu site está usando muito tempo de pesquisa, mas tem uma base da Web não AJAX (ou seja, o Apache com sondagem longa por cima).

Minha solução original para problemas de memória do Apaches era enviar o long polling através do node.js e depois obter o node.js para acessar o Apache a cada 2 segundos, caso em que o Apache não teria uma conexão aberta, mas sim o node.js. Cheguei à conclusão de que isso pode não ser bom o suficiente e estou procurando soluções diferentes. Ainda estou interessado em saber se minha ideia original teria funcionado.

Então, qual é o melhor para a web moderna? Apache ou Nginx?

Atualização: todas as sugestões dadas foram boas e válidas. Eu tenho ido com a segunda idéia original, que é usar um servidor Nginx completo. Estou convencido de que sendo um servidor dedicado eu não poderia sofrer problemas de segurança do fastcgi e desde que meus longos scripts de pesquisa precisam ser escritos em PHP eu preciso de um servidor que possa lidar com conexões simultâneas de alta carga e Apache não pode fazer isso não importa o quanto Eu mudo a estrutura que ainda vai ter fome de memória.

Eu tenho marcado a resposta de Martin F desde que ele deu uma resposta tão clara e completa às minhas questões que eu acho que ele merece a marca, no entanto, todas as três respostas foram boas e válidas e irão olhar para usar proxy reverso para outra site que eu possuo desde que eu encontrei algo muito muito muito kool que Nginx pode fazer em proxy.

Obrigado,

    
por Sammaye 05.07.2010 / 10:51

3 respostas

28

Você parece ter alguns equívocos que eu sinto que precisam ser abordados.

Primeiro de tudo, o mod_php é apenas marginalmente mais rápido, todos os meus testes mostraram que a diferença é tão minúscula que não vale a pena. Também duvido que o aspecto de segurança seja relevante para você, já que parece estar olhando para um O servidor dedicado e o mod_php realmente só têm uma vantagem em um ambiente compartilhado - na verdade, em um ambiente dedicado, o php-fpm terá a vantagem como PHP e seu servidor da web agora é executado como processos diferentes, e isso não inclui as incríveis opções de registro em php-fpm, como log lento.

Se o mundo fosse preto e branco, eu diria que vá com uma configuração nginx pura e compile o php com o php-fpm. Mais realisticamente, se você já tem o Apache funcionando, então faça do nginx um proxy reverso para o apache e você pode economizar algumas horas de tempo de configuração e a diferença no desempenho será pequena.

Mas vamos supor que o mundo é preto e branco por um segundo, porque isso cria configurações muito mais impressionantes. Você faz nginx + php-fpm para o seu servidor web. Para resolver os uploads, você usa o módulo de upload e o módulo de progresso de upload para o nginx. Isso significa que o seu servidor web aceita o upload e passa o caminho do arquivo para o PHP quando estiver pronto, para que o arquivo não precise ser transmitido entre o nginx e o PHP via protocolo fastcgi, sweet. (Eu tenho isso em uma configuração ao vivo e está funcionando muito bem, btw!)

Para o usuário fazer o download você usa o recurso x-send-file-like chamado x-accel-redirect, essencialmente você faz sua autenticação em PHP e configura um cabeçalho que o nginx pega e inicia a transferência desse arquivo. O PHP encerra a execução e o seu servidor web está lidando com a transferência, doce! (Novamente, eu tenho isso em uma configuração ao vivo e está funcionando muito bem)

Para distribuir arquivos através de servidores ou outras operações de longa duração, percebemos que o PHP não é mais adequado para isso, então instalamos o gearman, que é um servidor de trabalho que pode distribuir tarefas entre trabalhadores em servidores diferentes. escrito em qualquer idioma. Portanto, você pode criar um worker de distribuição e gerar 5 deles usando um total de 200 KB de memória em vez dos 100 MB que o PHP usaria. Doce. (Eu também tenho isso ao vivo, então é tudo realmente possível)

Caso você ainda não tenha percebido, acho que muitos de seus problemas não estão relacionados ao seu servidor, você só pensa assim porque o Apache obriga a ser relacionado ao seu servidor web devido a é estrutura, muitas vezes existem ferramentas muito melhores para o trabalho do que PHP e PHP é uma linguagem que sabe disso e fornece excelentes opções para descarregar o trabalho sem sair do PHP.

Eu recomendo o nginx, mas eu também acho que você deve procurar outras opções para seus outros problemas, se você tem um problema de escalonamento ou desempenho, sinta-se à vontade para me escrever. Eu não sei se você pode enviar mensagens por aqui, mas caso contrário, me escreva em [email protected], já que eu não persigo a falha do servidor por nada que não esteja marcado com nginx. :)

    
por 05.07.2010 / 20:06
5

Eu sugeriria executar o nginx como um proxy reverso. Ele vai lidar com todos os seus static & arquivos em cache (onde é consideravelmente mais rápido que o Apache / menos sobrecarga de memória) e, em seguida, encaminha todas as solicitações de conteúdo dinâmico para o Apache.

    
por 05.07.2010 / 11:08
1

Não tenho tanta certeza de que mod_php seja mais rápido que suas alternativas, onde você leu isso? Eu fiz alguns testes de laboratório com o nginx + php-fpm, e pelo que eu medi, ele bate em todas as outras configurações.

Veja esta configuração: link

Eu configurei quase da mesma forma, exceto que eu uso pacotes PHP do link - que inclui um pacote php-fpm e um script de inicialização pronto para uso. Eu não uso memecache ou syck.

    
por 05.07.2010 / 11:38