Otimizando seu web server com Apache2 + Lighttpd

Solução que fez com que o desempenho (velocidade de resposta) do servidor web do Viva o Linux aumentasse em até 8 vezes. O Apache2 possui módulos indispensáveis para servir páginas dinâmicas, enquanto o Lighttpd é imbatível quando se trata de páginas estáticas. Então, por quê não combinar os dois?

[ Hits: 102.934 ]

Por: Fábio Berbert de Paula em 03/09/2009 | Blog: https://mestrefabio.com


Testando a configuração



Em primeiro lugar devemos acessar o site e ver se tudo está aparecendo no lugar certo. :P

Se as imagens do site não estiverem aparecendo, verifique se o Lighttpd está rodando na porta 81:

$ telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Se não tiver, verifique os logs de erro em /var/log/lighttpd/error.log, corrija e inicie o serviço novamente.

Beleza! Agora vamos verificar os logs de acesso para saber se as requisições estão indo para o lugar certo.

Os logs do Apache e Lighttpd, por padrão e respectivamente, são:
  • /var/log/apache2/access.log
  • /var/log/lighttpd/access.log

Se você mudou o caminho nos arquivos de configuração, mude-os também nos comandos abaixo.

Vamos abrir os logs ao mesmo tempo usando o multitail:

# multitail -i /var/log/apache2/access.log -i /var/log/lighttpd/access.log

Obs.: Se não tiver o multitail instalado, pode usar o tail mesmo, a diferença é que o multitail é mais bonitinho.

# tail -f /var/log/apache2/access.log /var/log/lighttpd/access.log

Em seguida vamos acessar a home do site novamente. A saída deve ser algo do tipo:

Para o log do Apache:

189.1.53.233 - - [03/Sep/2009:09:05:53 -0300] "GET / HTTP/1.1" 200 9188 "-" "Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.1.2) Gecko/20090729 Firefox/2.0.0.11"

E para o log do Light:

::ffff:76.74.248.57 img.vivaolinux.com.br - [03/Sep/2009:09:07:28 -0300] "GET /imagens/artigos/comunidade/thumb_f4.jpg HTTP/1.1" 200 5674 "http://www.vivaolinux.com.br/artigo/Endian-Firewall-Solucao-completa-para-um-servidor-de-internet/?pagina=3" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13"
::ffff:76.74.248.57 img.vivaolinux.com.br - [03/Sep/2009:09:07:28 -0300] "GET /include/funcoes.js HTTP/1.1" 200 1595 "http://www.vivaolinux.com.br/artigo/Fazendo-uma-conexao-bridge-no-VirtualBox/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"
::ffff:76.74.248.57 img.vivaolinux.com.br - [03/Sep/2009:09:07:29 -0300] "GET /imagens/fotos/guaruja0019.jpeg HTTP/1.1" 200 7924 "http://www.vivaolinux.com.br/artigo/Fazendo-uma-conexao-bridge-no-VirtualBox/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"

Ou seja, somente uma entrada no log do Apache, que é o index.php e o restante (conteúdo estático) no log do Light. Note que se você já acessou o site anteriormente, como a tag Expires foi configurada, provavelmente NENHUM log será exibido no arquivo do Light, isso porque seu browser já possui os arquivos e não viu a necessidade de buscá-los novamente no servidor.

Página anterior     Próxima página

Páginas do artigo
   1. Considerações iniciais
   2. Apache2 vs Lighttpd
   3. Controle de cache no cliente: tags expires e etag
   4. Instalando e configurando o Lighttpd
   5. Integrando Apache2 com Lighttpd
   6. Testando a configuração
   7. Resultados e conclusão
Outros artigos deste autor

A trajetória do Viva o Linux - retrospectiva 2003/2004

Implementando um tradutor de línguas no seu web site

Instalando um sistema tradutor de línguas no seu Linux

Assumindo o controle do teu Android com ADB

SQL Dicas & Truques (versão 0.1)

Leitura recomendada

nginx em conjunto com Apache - Instalação e configuração no Debian e derivados

Como instalar o Linux (Debian) no Libretto 50CT

Entendendo o TCP/IP

Adicionar mensagens iniciais no terminal nas sessões de sudo

Run0 - Elevação de privilégios com systemd

  
Comentários
[1] Comentário enviado por elgio em 03/09/2009 - 12:00h

Muito bom Fábio.

O legal desta tua solução é a comprovação de que as vezes não basta esta ou aquela solução. Em alguns casos se usa AMBAS. O melhor das duas. Muito bom.

[2] Comentário enviado por marcelomortificy em 03/09/2009 - 12:11h

Muito bom!!!!


Parabéns Fábio.

[3] Comentário enviado por marcelomendes em 03/09/2009 - 12:15h

Muito bom Fábio, parabéns!

[4] Comentário enviado por TheHawk em 03/09/2009 - 13:13h

Geralmente não comento muito aqui no VOL..... mas essa aqui eu fiz questão de deixar o comentario.... tá de parabens.... muito boa solução, otimizou bem o negocio.... trabalho com provedor wireless e aqui estou usando o ThunderCache, quando estava usando o apache para servidor os arquivos para o thunder estava tendo uma lentidão terrivel.... depois de mudar o servidor web parea o lighttpd foi dá agua para o vinho, extremamente rapido e leve.... o light é otimo...... mais uma vez parabens pela solução, até mais.

[5] Comentário enviado por cesar em 03/09/2009 - 13:45h

Boa!

[]'s

[6] Comentário enviado por cleberjsantos em 03/09/2009 - 13:59h

Opa Fábio,

Boa.... ;) E então, eu estava testando o Light também, mas me deparei com alguns problemas, talvez por ainda não o conhecer diretamente claro! Mas a idéia era basicamente abandonar o Apache e partir para a combinação Lighttpd + Varnish, hoje uso Apache + Varnish, no qual já dá um adianto tremendo, então imagina o Light + Varnish ;)

Bem, vou documentar minha experiência, e com base nela fazer um How-to aqui também, neste caso estou falando de usar Zope/Plone com Light + Varnish, se depois desejar podemos trocar figurinhas quanto a otimizações ;)

Cleber J Santos
www.cleberjsantos.com.br

[7] Comentário enviado por foguinho.peruca em 03/09/2009 - 18:09h

Olá!

Boa solução! Vou tentar implementar uma semalhante, porém eu o uso a combinação do tomcat (para o java) + apache (redirecionamento na rede). acho que vou dividir a carga do tomcat com o lighttpd e ver no que da... ^^''

Jeff

[8] Comentário enviado por removido em 03/09/2009 - 21:03h

Parabéns chefito.... Será que seu trabalho vai ganhar uma camiseta redbul ?????
rs...rs...rs...rs...

[9] Comentário enviado por isaque_alves em 03/09/2009 - 23:09h

Cara, essa solução é perfeita...
vo testar assim que chegar em casa no meu servidor de testes e demonstações...
valeu por compartilhar o conhecimento!!
E é isso!!

Viva o Software Livre!!!
Viva o Linux!!

[10] Comentário enviado por maran em 04/09/2009 - 12:30h

Show!

[11] Comentário enviado por junior em 04/09/2009 - 15:55h

Já dizia o poeta: Fodástico!

[12] Comentário enviado por pinduvoz em 04/09/2009 - 21:30h

O site realmente ganhou agilidade.

Parabéns!

[13] Comentário enviado por pedro-filho em 06/09/2009 - 02:56h

tem como configurar o expires no squid ?????

obrigado....

[14] Comentário enviado por reideer em 07/09/2009 - 21:40h

Boa noite.
Eu já testei esta solução a algum tempo, porém precisava de virtualhosts e mais algumas coisas, no final das contas se tornou inviável.

Gostaria de Saber se o Vol utiliza algum sistema de Cache, e qual?

[15] Comentário enviado por franciscosouza em 09/09/2009 - 08:16h

Sensacional, parabéns pelo artigo! ;D

[16] Comentário enviado por removido em 09/09/2009 - 20:31h

Boa noite.

Fábio, você poderia corrigir o exemplo de integração do Apache com Lighttpd na 'Versão para impressora'. O exemplo de configuração para integrar os dois Web Server é exibido da seguinte forma:

<img src="http://img.vivaolinux.com.br/imagens/logotipo01.png">
Para:
<img src="http://img.vivaolinux.com.br/imagens/logotipo01.png">

Deveria ser:

<img src="/imagens/logotipo01.png">
Para:
<img src="http://img.vivaolinux.com.br/imagens/logotipo01.png">



[17] Comentário enviado por guilhermecunha em 10/09/2009 - 08:43h

Muito legal, concerteza me lembrarei deste artigo quando administrar um site com muitos acessos...

Abraço!

Guilherme Cunha
http://www.guilhermecunha.com.br

[18] Comentário enviado por removido em 20/11/2009 - 15:59h

Fabio,

Estou com a seguinte situação e gostaria de uma opinião sua.

o hardware é o seguinte.

DELL 1950

2 processadores quadcore e 8gb de RAM
2 discos SAS em RAID 1

o sistema que esta hospedado nele é TOMCAT e POSTGRES 8.3. O Load average dele é de uma média de 3.5 a 4, tenho uma média de 250 conexões simultãneas e acho que esta ficando cada vez mais lento.

Tentei uma solução de proxy reverso com o apache mais a aplicação fica com problemas no jsession, ai vem a minha pergunta se eu colocasse o lighttpd na frente junto com o apache para separar o conteudo statico melhoraria????

abraços

Filipe Mendonça

[19] Comentário enviado por removido em 20/11/2009 - 20:25h

Ótimo artigo Fábio.
Intressante essa implementação para o site.

[]'s

[20] Comentário enviado por fabio em 21/11/2009 - 22:26h

Olá Filipe,

No caso você não precisaria do Apache, apenas o Lighttpd com Tomcat.

Alguma processo está pesando demais aí, essa máquina não pode ter 3/4 de load com apenas 250 acessos simultâneos.

PS: O Tomcat por natureza é lento e consome muito hardware, pelo menos era assim quando o utilizei a 4 ou 5 anos atrás, não sei como é agora.

Um abraço.

[21] Comentário enviado por Holmes em 16/12/2009 - 22:08h

muito interessante, vlw, Placebo..............gostei das informações...........

[22] Comentário enviado por ferreirajr630 em 26/01/2010 - 09:14h

Paraben otimo mas otimo mesmo esse artigo esparo que venha mas artigos na mesma categoria de melhoria de navegação

[23] Comentário enviado por dolivervl em 09/03/2010 - 20:05h

Muito bom mesmo, Parabéns !!!

[24] Comentário enviado por elderjmp em 30/08/2010 - 00:12h

Fábio,

Parabéns pelo artigo, muito bom.

Pq usar o mod_proxy do Apache para direcionar as requisições de conteúdo estático ao invés de requisitar diretamente ao Lighttpd, passando o caminho na porta 81, no arquivo index.php (<img src="http://img.vivaolinux.com.br:81/imagens/logotipo01.png">)?

E usando o Debian aqui, ocorreu o erro "client denied by server configuration: proxy:http://...". O mod_proxy só funcionou depois de habilitar no arquivo /etc/apache2/mods-available/proxy.conf a diretiva "Allow from all" (Default é "Deny for all"). Algum problema em permitir para todos?

Abraço

[25] Comentário enviado por fabio em 30/08/2010 - 00:34h

Olá Elder,

Passar o caminho diretamente no código-fonte ao invés de usar o mod_proxy é viável quando seu site é composto por apenas alguns arquivos, mas no caso do VOL, ele possui milhares de links, então é mais fácil alterar somente o apache.conf a centenas de arquivos.

O allow from all é tranquilo de usar, mas sugiro que dê um options -indexes para evitar que possam acessar a lista de arquivos dos diretórios.

[]'s

[26] Comentário enviado por julianjedi em 16/09/2010 - 13:02h

Nossa .. muito bom mesmo fabio, quando li no excerpt do artigo pensei ateh q vc ia fazer um monte de remendo ... mas ficou muito simples de entender e os resultados foram sensacionais ... com certeza é uma grande contribuição para a comunidade...

Já dizia o poeta: Fodástico![1]

[27] Comentário enviado por dolivervl em 08/10/2010 - 23:57h

Fábio uma coisa que quero saber de vc é o seguinte, compactação com o apache, já usou ? qual sua opnião sobre isso? Uso no proxy onde trabalho e reduziou e muito o consumo de banda e não aumento consideravelmente o uso de CPU do servidor proxy.

[28] Comentário enviado por removido em 09/11/2010 - 08:35h

Sabia que o IIS da o mesmo problema e que é ainda pior que no apache?

[29] Comentário enviado por qxada07 em 24/03/2011 - 09:13h

Um artigo muito bom... Parabéns.....

Sempre achei o Apache muuuuito ferrado porém estes 2 integrados não tem para ninguém....

[30] Comentário enviado por SmasherBomb em 10/04/2011 - 13:43h

Parabéns...artigo muito bom !!

[31] Comentário enviado por fabgcruz em 15/04/2011 - 09:15h

Muito bacana o artigo .... maravilha !

[32] Comentário enviado por ederrb em 06/05/2011 - 11:17h

Fábio(e quem mais puder ajudar), tenho exatamente essa máquina: Intel Xeon E3110 Woldfale (2 cores x 3.0 GHz), 8GB Ram e 1,5TB de disco. Nessa maquina rodo um servidor de armazenamento de áudio(tal como o 4shared) sendo que com algumas implementações a mais e alguns diferenciais(vide www.suamusica.com.br ). Na hora do pico chega a ter mais de 200 downloads simultaneos. Estes downloads são feitos através de readfile() no php(principalmente para que os visitantes não tenham conhecimento sobre o caminho dos arquivos p/ download). Isso deixa a máquina arrastando-se, já cheguei a registrar load de 95 e a solução que vi foi reiniciar o httpd acarretando na perda de todas as conexões, caso eu não restarte o httpd a maquina trava geral. Ouvi dizer que o lighthttpd tem uma extensão X-LIGHTTPD-send-file que dispensaria o uso de readfile(), assim o php nao faria o trabalho de "soltar o download na tela" e pelo que vejo nos processos é justamente ele quem está consumindo todo o hardware da maquina. Pela sua experiência, seria viável instalar o lighthttpd com essa configuração passada por você + essa extensão? Tentei usar a extensão na minha configuração atual com apache mas nao obtive êxito. Desculpe-me pelo texto demasiado longo, vi aqui uma oportunidade de resolver este problema que vem persistindo há quase um mes. Agradeço desde já ! Abraços.

[33] Comentário enviado por samuelspsd em 16/01/2012 - 17:24h

Eu teria algumas dúvidas em relação a este artigo, ainda está aberto para discussão? Obrigado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts