Apache Cache · 3 min read · Jan 01, 2026

Cache com mod_cache do Apache no Debian Etch - Página 2

2.2 mod_mem_cache

A configuração do mod_mem_cache está localizada em /etc/apache2/mods-available/mem_cache.conf:

vi /etc/apache2/mods-available/mem_cache.conf   

| CacheEnable mem / MCacheSize 4096 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 2048 |

Esta é a configuração padrão - se você quiser, pode modificá-la. Uma lista de diretivas de configuração para mod_mem_cache está disponível aqui: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html

Agora vamos habilitar mod_cache e mod_mem_cache da seguinte forma:

a2enmod cache
a2enmod mem_cache

/etc/init.d/apache2 force-reload

Isso é tudo! Com mod_mem_cache, você não precisa limpar nenhum diretório de cache.

3 Testando

Infelizmente, o mod_cache não fornece nenhuma funcionalidade de registro, o que é ruim se você quiser saber se o registro está funcionando. Portanto, eu criei um pequeno arquivo de teste PHP, /var/www/cachetest.php, que envia cabeçalhos HTTP que informam ao mod_cache que ele deve armazenar em cache o arquivo por 300 segundos e que simplesmente imprime o timestamp:

vi /var/www/cachetest.php

| "; ?> |

Agora chame esse arquivo em um navegador - ele deve exibir o timestamp atual. Em seguida, clique na barra de endereços do navegador e pressione ENTER para que a página seja carregada novamente (não pressione F5 ou o botão de recarregar - isso sempre buscará uma cópia nova do servidor em vez do cache!) - se tudo correr bem, você ainda deve ver o antigo timestamp em cache. Se você esperar 300 segundos, deverá obter uma cópia nova do servidor em vez do cache.

4 Cabeçalhos HTTP

O cache não funciona imediatamente - você deve modificar sua aplicação web para que o cache possa funcionar (é possível que sua aplicação web já suporte cache - consulte a documentação de sua aplicação para descobrir). O mod_cache armazenará em cache páginas da web apenas se os cabeçalhos HTTP enviados pela sua aplicação web informarem para fazê-lo.

Aqui estão alguns exemplos de cabeçalhos que informam ao mod_cache não armazenar em cache:

  • Cabeçalhos Expires com uma data no passado: “Expires: Sun, 19 Nov 1978 05:00:00 GMT”
  • Certos cabeçalhos Cache-Control: “Cache-Control: no-store, no-cache, must-revalidate” ou “Cache-Control: must-revalidate, max-age=0”
  • Cabeçalhos Set-Cookie: uma página não será armazenada em cache se um cookie for definido.

Portanto, se você quiser que o mod_cache armazene suas páginas em cache, modifique sua aplicação para não enviar esses cabeçalhos.

Se você quiser que o mod_cache armazene suas páginas em cache, pode definir um cabeçalho Expires com uma data no futuro, mas a maneira recomendada é usar max-age:

"Cache-Control: must-revalidate, max-age=300"

Isso informa ao mod_cache para armazenar a página em cache por 300 segundos (max-age) - infelizmente, o mod_cache não conhece a opção s-maxage (veja http://www.mnot.net/cache_docs/#CACHE-CONTROL), por isso devemos usar a opção max-age (que também informa ao seu navegador para armazenar em cache - por favor, tenha isso em mente se você obtiver resultados inesperados!). Se o mod_cache conhecesse a opção s-maxage, poderíamos usar “Cache-Control: must-revalidate, max-age=0, s-maxage=300” que informaria ao mod_cache, mas não ao navegador, para armazenar a página em cache.

Claro, esse cabeçalho é inútil se você enviar um dos cabeçalhos que não armazenam em cache (Expires no passado, Set-Cookie, etc.) ao mesmo tempo!

Outro cabeçalho muito importante para o cache é este:

"Vary: Accept-Encoding"

Isso faz com que o mod_cache mantenha duas cópias de cada página em cache, uma comprimida (gzip) e uma descomprimida, para que possa entregar a versão correta dependendo das capacidades do user-agent/navegador. Alguns user-agents não entendem a compressão gzip, então eles devem receber a versão descomprimida.

Então aqui está o resumo: use os seguintes dois cabeçalhos se você quiser que o mod_cache armazene em cache:

“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”

e certifique-se de que nenhum Expires com uma data no passado, cookies, etc. sejam enviados.

Se sua aplicação estiver escrita em PHP, você pode usar a função header() do PHP para enviar cabeçalhos HTTP, por exemplo, assim:

header(“Cache-Control: must-revalidate, max-age=300”);
header(“Vary: Accept-Encoding”);

Esta página é uma leitura obrigatória se você quiser aprender mais sobre cabeçalhos HTTP e cache: http://www.mnot.net/cache_docs/

5 Links

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.