Apache versus Nginx

Depois de uma fase conturbada e sem artigos novos vamos retornar escrevendo um comparativo entre Nginx e Apache.

Apache vs Nginx

Para elaborar os testes criamos quatro arquivos de naturezas diferentes para serem servido pelo Apache e posteriormente pelo Nginx para que possamos comparar.

Para medir a capacidade de cada servidor utilizamos um outro computador conectado na mesma rede do servidor testado e com a rede isolada efetuamos os testes usando ab (Apache Benchmark).

Os artefatos

Como artefatos utilizamos um arquivo html estático nomeado estatica.html com o conteúdo:

<h1>Testando</h1>
<p>Isto é uma página estática</p>

Como podemos ver aqui:

Página Estática

Um arquivo dinamica.php com um conteúdo:

    <?php
    echo "<h1>Isto é uma página dinâmica</h1>";
    for($i=0; $i<10; $i++)
    {
        for($j=0; $j<10; $j++)
        {
                echo "$i.$j";
                echo PHP_EOL;
        }
    }
    ?>

Como vemos aqui:

Página Dinâmica

Um arquivo info.php que gera as configurações do php muito utilizado para testes com o conteúdo:

    <?php
    phpinfo();

E um arquivo de imagem de 80KB:

Imagem Genérica

Montando o ambiente

Primeiro instalamos o tradicional LAMP, com exceção do MySQL, onde o php roda sobre o Apache Handler como podemos ver nas informações do phpinfo:

phpinfo apache

Fizemos um teste acessando os arquivos e em seguida desligamos o serviço do apache:

    sudo service httpd stop

Istalamos o chamado LEMP, também com exceção do MySQL, onde o php roda sobre o php-fpm que serve as páginas através do fastcgi como podemos ver:

phpinfo nginx

Testamos novamente para ver se nossas configurações funcionaram e em seguida desligamos o serviço do Nginx e do PHP-FPM:

    sudo service nginx stop
    sudo service php-fpm stop

Para maiores informações sobre a instalação do LAMP e do LEMP acesse outros artigos meus neste blog em mais antigos ou pelas tags / marcadores.

O Teste

O ambiente usado como servidor foi um Intel Core i5 com 4GB de memória rodando Fedora 17 com Apache 2.2.22, Nginx 1.0.15 e PHP 5.4.7.

A ferramenta que utilizamos para medição foi o Apache Benchmark e rodamos através do comando:

    ab -kc 10 -t 30 http://url-de-destino/arquivo.ext

Onde:

  • k – é keep alive
  • c – é quantidade de concorrência
  • t – é tempo em segundos

Com o servidor Apache ligado executamos o comando apontando para cada arquivo testado (estático, dinâmico, phpinfo e imagem) coletando os resultados.

Depois desligamos o servidor Apache, ligamos o servidor Nginx junto com o PHP-FPM e repetimos os testes coletando novamente os resultados

Os resultados

Como podemos ver o Nginx teve uma melhor performance servindo os arquivos testados.

9871 requisições completadas no Nginx contra 4561 requisições no Apache para a página dinamica.php

Comparativo de Página Dinâmica

21231 requisições completadas no Nginx contra 10127 requisições no Apache para a página estatica.html

Comparativo de Página Estática

639 requisições completadas no Nginx contra 621 requisições no Apache para o arquivo de imagem.

Comparativo de Comparativo

734 requisições completadas no Nginx contra 501 requisições no Apache para o arquivo info.php,

Comparativo de Página Dinâmica de Informações

Concluindo:

Com Nginx tivemos performances de até 116% maior que Apache2 para o mesmo ambiente.

Divirtam-se e até a próxima…