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 | |
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-reloadIsso é 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
- Apache: http://httpd.apache.org/
- mod_cache: http://httpd.apache.org/docs/2.2/mod/mod_cache.html
- mod_disk_cache: http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
- mod_mem_cache: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
- Guia de Cache do Apache: http://httpd.apache.org/docs/2.2/caching.html
- Tutorial de Cache: http://www.mnot.net/cache_docs/
- Debian: http://www.debian.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.