O cache do Apache funciona apenas às vezes

1

Eu estou tentando configurar o cache no meu site Apache, começando com uma configuração básica que eu posso testar um script PHP com um navegador:

CacheEnable disk /
CacheRoot /var/www/cache
CacheDefaultExpire 3600
CacheMinExpire 3600
CacheIgnoreNoLastMod On
CacheIgnoreCacheControl On

No entanto, só funciona se a página não for "redirecionada" de alguma forma. Por exemplo, estou testando esse script PHP simples no diretório raiz chamado "test.php":

<?php
    echo date('h:i:s');
?>

Se eu for para "... / test.php" no meu navegador, funciona: o tempo de saída não muda após a primeira visita.

Se eu for para "... / test", não funciona: a saída sempre muda para a hora atual.

Duas notas:

  1. Quando funciona, vejo um campo "idade" na resposta em cache com um número de segundos atualizado desde que a página foi exibida pela primeira vez. Quando não funciona, não há campo "idade" na resposta.
  2. Eu não tenho um arquivo .htaccess no diretório raiz, e não consegui encontrar onde o Apache sabe servir o script sem a extensão "php". Quando eu testo usando um arquivo .htaccess com um RewriteRule, ele não armazena em cache a resposta quando ela corresponde. Não tenho certeza se isso é importante.

Alguma ideia? Obrigado!

    
por ScottyB 30.12.2017 / 21:59

1 resposta

4

Normalmente, você precisa definir corretamente os cabeçalhos de armazenamento em cache para o cache de páginas funcionar. Há um bom artigo aqui e os documentos do Apache aqui .

Em resumo desse artigo, você deseja definir o cabeçalho Cache-Control. Você pode definir etag, mas o resto como pragma você não deveria se preocupar.

Cache-Control: max-age=86400

No Apache isso é feito com mod_expires , que seria configurado assim:

# enable expirations
ExpiresActive On
# expire GIF images after a month in the client's cache
ExpiresByType image/gif A2592000
# HTML documents are good for a week from the
# time they were changed
ExpiresByType text/html M604800
    
por 31.12.2017 / 01:35