mod_cache não está funcionando

5

Eu tenho um site PHP que possui muitas páginas geradas dinamicamente. Eu estou tentando transformar em mod_cache para ajudar a melhorar o desempenho, porque na maioria dos casos, o conteúdo não muda em um determinado dia.

Eu configurei o mod_cache da melhor maneira possível, seguindo exemplos em toda a web, incluindo a página mod_cache no apache .org . Quando eu defino LogLevel debug , vejo um pouco de informação sobre o cache que não está acontecendo. Existem muitos pares de linhas como esta:

[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar

O que é bom, porque eu defini CacheEnable disk /foo , para indicar que eu quero tudo sob / foo em cache. Eu sou novo no mod_cache, mas o meu entendimento sobre essas linhas é que isso significa apenas que o mod_cache reconheceu que a URL deve ser armazenada em cache, mas supõe-se que haja mais linhas indicando que está salvando os dados em cache e em seguida, recuperando-os posteriormente em ocorrências subsequentes para o mesmo URL.

Eu posso acessar a mesma URL até ficar com a cara azul, seja com a atualização da F5 ou não, ou com navegadores diferentes ou computadores diferentes. É sempre esse par de linhas que aparece nos logs e nada mais.

Quando eu defino CacheEnable disk / , vejo mais atividade. Mas não quero armazenar todo o site em cache, e há muitos subcaminhos diferentes no site, por isso não quero ter que modificar o código para definir no-cache cabeçalhos em todos os locais necessários.

Eu vou mencionar que mod_rewrite está em uso aqui, reescrevendo / foo / bar para algo como index.php?baz=/foo/bar , mas meu entendimento é que o mod_cache usa o URL de pré-reescrita, não o URL de pós-reescrita.

Tanto quanto eu posso dizer, eu tenho os cabeçalhos de resposta não ficando no caminho do cache. Aqui está um exemplo de um hit:

Cache-Control:must-revalidate, max-age=3600
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:16790
Content-Type:text/html
Date:Fri, 01 Jun 2012 21:43:09 GMT
Expires:Fri,  1 Jun 2012 18:43:09 -0400
Keep-Alive:timeout=15, max=100
Pragma:
Server:Apache
Vary:Accept-Encoding

mod_cache config é o seguinte:

CacheRoot   /var/cache/apache2/
CacheDirLevels 3
CacheDirLength 2
CacheEnable disk /foo

O que está atrapalhando o mod_cache fazendo seu trabalho de armazenamento em cache?

    
por Pistos 01.06.2012 / 23:50

2 respostas

1

Esta é a minha configuração e funciona bem:

<IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_disk_cache
    CacheIgnoreCacheControl On
    CacheMaxFileSize 2500000
    CacheIgnoreURLSessionIdentifiers jsessionid
    CacheIgnoreHeaders Set-Cookie
</IfModule>

Você precisa ter CacheIgnoreURLSessionIdentifiers que atenda às suas necessidades, então talvez no PHP você precisa

CacheIgnoreURLSessionIdentifiers PHPSESSID

considera Janning

    
por 04.06.2012 / 21:41
1

Eu estava enfrentando o mesmo problema ao tentar mapear

CacheEnable Disk /api

O único mapeamento que funcionou foi

CacheEnable Disk / 

Que armazenou tudo em cache.

Mesmo que a documentação diga que o mod_cache é executado após a url-rewrite isso não aconteceu. Para que funcione, mudei para

CacheEnable Disk /index.php/api
    
por 30.01.2013 / 19:30