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.