Otimizando o Apache

Usar um servidor Web como o Apache é uma coisa simples, mas usar da melhor forma dá algum trabalho. Já mostramos como fazer alta disponibilidade com apache, mostramos como fazer proxy reverso e agora vamos mostrar como melhorar o desempenho do servidor para algumas situações específicas.

Todo servidor web além de servir páginas em html, php, javascript, asp e etc, também fornece conteúdos de mídia (fotos, gifs animados, videos, arquivos para download). Pensando em usar melhor os recursos do servidor e economizar banda na hora de trocar informações com seus clientes vamos fazer alguns ajustes simples que apresentam ótimos resultados no dia a dia.

Primeiro vamos fazer com que o browser de nossos clientes armazenem conteúdos estáticos de nosso site por mais tempo, pois como todos vocês sabem os browsers e os proxys costumam fazer cache do que eles acessam nas páginas, mas o tempo de vida do que eles armazenam em cache é determinado pelo servidor web , assim vamos usar o módulo expire para determinar aos browsers qual o tempo que eles devem armazenar os objetos.

O módulo geralmente vem instalado junto com o apache2, basta carregá-lo:

root # a2enmod expires

Agora vamos adicionar ao arquivo de configuração do apache2 (/etc/apache2/apache2.conf ou ao /etc/apache2/httpd.conf) as seguintes linhas se queremos que as alterações sejam para todos os sites hospedados no servidor Web, para fazer apenas para alguns sites utilize no arquivo (ou seção) de configuração de cada site ou do htaccess do mesmo:

root # vi /etc/apache2/apache2.conf

<IfModule mod_expires.c>
          ExpiresActive on
          ExpiresByType image/jpg "access plus 60 days"
          ExpiresByType image/png "access plus 60 days"
          ExpiresByType image/gif "access plus 60 days"
          ExpiresByType image/jpeg "access plus 60 days"
          ExpiresByType text/css "access plus 1 days"
          ExpiresByType image/x-icon "access plus 1 month"
          ExpiresByType application/pdf "access plus 1 month"
          ExpiresByType audio/x-wav "access plus 1 month"
          ExpiresByType audio/mpeg "access plus 1 month"
          ExpiresByType video/mpeg "access plus 1 month"
          ExpiresByType video/mp4 "access plus 1 month"
          ExpiresByType video/quicktime "access plus 1 month"
          ExpiresByType video/x-ms-wmv "access plus 1 month"
          ExpiresByType application/x-shockwave-flash "access 1 month"
          ExpiresByType text/javascript "access plus 1 week"
          ExpiresByType application/x-javascript "access plus 1 week"
          ExpiresByType application/javascript "access plus 1 week"
</IfModule>

Podemos fazer também por regex:

<IfModule mod_expires.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresActive On
ExpiresDefault "access plus 1 year"
</FilesMatch>
</IfModule>

Os tempos podem ser determinados em :
years – anos
months – meses
weeks – semanas
days – dias
hours – horas
minutes – minutos
seconds – segundos

Para comprimir os dados e enviar pacotes menores fazemos o seguinte:

root # a2enmod expires

root # vi /etc/apache2/apache2.conf

<IfModule mod_deflate.c>
   AddOutputFilterByType DEFLATE text/plain
   AddOutputFilterByType DEFLATE text/html
   AddOutputFilterByType DEFLATE text/xml
   AddOutputFilterByType DEFLATE text/css
   AddOutputFilterByType DEFLATE text/javascript
   AddOutputFilterByType DEFLATE application/xml
   AddOutputFilterByType DEFLATE application/xhtml+xml          
   AddOutputFilterByType DEFLATE application/rss+xml
   AddOutputFilterByType DEFLATE application/javascript
   AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

Podemos também acrescentar arquivos por extensão:

<IfModule mod_deflate.c>
<Files *.jpg>
   SetOutputFilter DEFLATE
</Files>
<Files *.gif>
   SetOutputFilter DEFLATE
</Files>
<Files *.png>
   SetOutputFilter DEFLATE
</Files>
<Files *.txt>
   SetOutputFilter DEFLATE
</Files>
<Files *.ico>
   SetOutputFilter DEFLATE
</Files>
</ifModule>

Lembre-se de não usar esse módulo com arquivos compactados, pois isso gerará processamento desnecessário.

Podemos também definir o nível de compressão dentro do módulo deflate, onde os níveis vão de 1(mínimo) até 9(máximo):

<IfModule mod_deflate.c>
    SetOutputFilter DEFLATE
    DeflateCompressionLevel 9
</ifModule>

Agora basta reiniciar o apache2:

root # service apache2 restart

Com isso conseguimos diminuir o consumo de banda de nossos servidores web pois ao comprimir e aumentar o tempo de cache melhoramos o acesso tanto de quem vê nosso site a primeira vez quanto nossos leitores regulares.

Não se esqueçam de votar no CooperaTI no TopBlog e curtir nossa página no Facebook.

  • jonas isaias

    Wagner, blz
    Obrigado pelo artigo.
    Fiquei com uma dúvida. O que isto poderia provocar, em termos de cargas de processo em um servidor, quando temos acessos em grande escala.

    • Jonas,

      O módulo deflate causa um pequeno, pequeno aumento de uso de processador já que o uso de algoritmos de compressão é feito pela cpu, mas em geral em servidores com múltiplos sites e acessos ainda assim o ganho de banda supera o incremento de processamento.

  • Junior Oliveira

    Obrigado pelo artigo, foi de muito ajuda !