Como eu evito que o lighttpd armazene em cache arquivos estáticos, mesmo quando modificados no disco?

10

Estou usando o lighttpd para fornecer arquivos estáticos. Eu tenho um monte de imagens em um diretório que eu atualizo regularmente. Isso irá alterar o conteúdo do arquivo (e tamanho do arquivo), bem como a data de modificação, mas não o nome do arquivo.

Quando eu acesso os arquivos por meio de http, as atualizações não são levadas em conta e o lighty exibe o arquivo antigo. Eu posso renomear manualmente o arquivo para algo diferente, então lighttpd retornará um erro 404, e se eu renomear meu arquivo de volta, eu vou ter a versão atualizada correta. Parece que o lightty está usando algum tipo de mecanismo de cache próprio (o que é bom) para retornar arquivos estáticos. Infelizmente, parece que esse mecanismo não se atualiza quando os arquivos são modificados.

Eu verifiquei através do Wireshark, e meu navegador está realmente fazendo uma solicitação para o arquivo, isso não é um problema de cache do navegador. Ele retorna um 200 OK ao solicitá-lo de um cache vazio, e um 304 Not Modified caso contrário, como esperado. Mas o arquivo é retornado com um cabeçalho Last-Modified incorreto que não reflete a data da última modificação real.

Talvez haja alguma diretiva de configuração que eu não conheça?

Gostaria que os arquivos retornados pelo lighty refletissem diretamente as alterações feitas no disco ou, pelo menos, invalidassem o cache.

Atualização para qualquer um que segue esta questão: Eu encontrei um culpado. Se eu atualizar um arquivo estático, Lighty não retorna o novo conteúdo, mas retorna o novo Content-Length em seus cabeçalhos, resultando em lixo exibido. Se eu comprimir o arquivo usando mod_compress, o problema desaparece, pois o mod_compress usa seu próprio sistema de cache. Infelizmente, não consigo compactar todos os arquivos (arquivos de imagem, por exemplo). Portanto, é apenas uma correção parcial, mas voltarei a ela mais tarde e encontrarei uma solução com muita habilidade.

    
por Pixelastic 21.06.2011 / 16:50

5 respostas

6

Eu finalmente encontrei o problema. E vem do VirtualBox.

Ao editar um arquivo no Host (Win), o lighttpd no guest (Linux) não atualiza corretamente o conteúdo do arquivo (mas atualiza corretamente o tamanho do arquivo), retornando assim o conteúdo recortado ou truncado.

Desmontando minhas unidades compartilhadas e recondicionando-as ou editando arquivos diretamente no guest, resolvemos o problema.

Demorei 6 meses para finalmente descobrir isso.

    
por 05.12.2011 / 15:50
3

Você não menciona se você tem o mod_cache instalado ou não? Este módulo é padronizado como 'ativado' quando instalado.

Eu detesto sugerir isso, mas ativar a ajuda do Etags?

    
por 23.06.2011 / 06:33
2

Tente definir o armazenamento em cache do mecanismo de estatística como 'desativado':

server.stat-cache-engine = "disable'
    
por 21.06.2011 / 17:10
2

Esta opção lighttpd funcionou para mim

server.network-backend = "writev" 
    
por 01.04.2013 / 10:47
1

Experimente estas entradas etag e veja se elas ajudam você:

Regras de controle de cache para lighthttpd

    
por 02.07.2011 / 05:03

Tags