Estou quebrando a cabeça com isso desde ontem. Estou tentando configurar o mod_cache para armazenar em cache arquivos JavaScript específicos usando a seguinte configuração colocada na seção de configuração do meu host virtual:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache24/mod_cache_disk
CacheQuickHandler off
CacheIgnoreQueryString On
<LocationMatch "chunk-.+\.js$">
CacheEnable disk
CacheHeader on
CacheDetailHeader on
CacheMaxFileSize 25000000
CacheDefaultExpire 86400
</LocationMatch>
</IfModule>
</IfModule>
Os arquivos são adicionados corretamente ao cache, conforme mostrado pelos cabeçalhos das solicitações http e pela saída de htcacheclean -a -p /var/cache/apache24/mod_cache_disk/
:
GET https://example.com/en/chunk-WXIYG2YB.js
HTTP/2 200
last-modified: Sun, 01 Sep 2024 20:39:11 GMT
etag: "114a-62114d11a75eb-gzip"
accept-ranges: bytes
vary: Accept-Encoding
content-encoding: gzip
x-robots-tag: noindex
x-cache: MISS from mydomain.com
x-cache-detail: "cache miss: attempting entity save" from mydomain.com
content-type: application/javascript
date: Wed, 04 Sep 2024 10:35:43 GMT
server: Apache/2.4.59 (FreeBSD) OpenSSL/1.1.1t-freebsd
X-Firefox-Spdy: h2
e o cache:
https://example.com:443/en/chunk-IUI5V3WX.js?
https://example.com:443/en/chunk-IUI5V3WX.js?
https://example.com:443/en/chunk-WXIYG2YB.js?
https://example.com:443/en/chunk-WXIYG2YB.js?
...
Como pode ser visto, além do fato de haver duplicatas, um caractere "?" é anexado à chave de cache, o que suspeito que possa levar a perdas de cache, mesmo que eu tenha adicionado a configuração CacheIgnoreQueryString.
Todas as requisições que devem atingir o cache resultam em "falha de cache: tentativa de salvar entidade". Eu realmente apreciaria qualquer ajuda ou ideia neste momento.
desde já, obrigado
Por algum motivo, adicionar a opção de configuração
CacheIgnoreCacheControl on
parece resolver o problema: o cache agora é atingido, mas não entendo por que essa opção é necessária, já que nenhum cabeçalho que impeça o cache é enviado. Não sou muito fã dessa solução, pois é mais uma solução alternativa com o efeito colateral infeliz de tornar o cabeçalho Cache-Control inutilizável.Editar : Na verdade, após investigações posteriores, descobriu-se que o problema era uma regra de reescrita que estava em conflito com o mecanismo de cache. A regra correspondia se um arquivo não fosse encontrado no disco e, portanto, o cache nunca era atingido.
Primeiro, leia os documentos
htcacheclean
novamente. O?
está explicado lá.Para depurar arquivos de cache duplicados: além dos cabeçalhos de resposta que você colou acima, você também precisa olhar os cabeçalhos de solicitação . Personalize seu log de acesso para registrar cookies, por exemplo.
Outra causa possível é
CacheQuickHandler off
.Quando se trata do httpd, há realmente muito poucos comportamentos que não podem ser explicados após uma leitura cuidadosa da documentação para aprender o que cada diretiva realmente faz.