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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <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:
1 2 3 4 5 6 | <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
1 2 3 4 5 6 7 8 9 10 11 12 | <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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <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):
1 2 3 4 | <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.
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.