Estoy usando lighttpd para servir archivos estáticos. Tengo un montón de imágenes en un directorio que actualizo regularmente. Esto cambiará el contenido del archivo (y el tamaño del archivo), así como la fecha de modificación, pero no su nombre de archivo.
Cuando accedo a los archivos a través de http, las actualizaciones no se tienen en cuenta y lighty sirve el archivo antiguo. Puedo cambiar manualmente el nombre del archivo a algo diferente, entonces lighttpd devolverá un error 404, y si cambio el nombre de mi archivo, obtendré la versión actualizada correcta. Parece que lightty está utilizando algún tipo de mecanismo de caché propio (que está bien) para devolver archivos estáticos. Desafortunadamente, parece que este mecanismo no se actualiza solo cuando se modifican los archivos.
Revisé a través de Wireshark, y mi navegador realmente está haciendo una solicitud al archivo, esto no es un problema de almacenamiento en caché del navegador. Devuelve un 200 OK cuando lo solicita desde un caché vacío, y un 304 No modificado de lo contrario, como se esperaba. Pero el archivo se devuelve con un encabezado Last-Modified incorrecto que no refleja la fecha real de la última modificación.
¿Quizás hay alguna directiva de configuración que no conozco?
Me gustaría que los archivos devueltos por lighty reflejen los cambios realizados en el disco directamente, o al menos puedan invalidar su caché.
Actualización para cualquiera que siga esta pregunta: encontré un culpable. Si actualizo un archivo estático, Lighty no devuelve el nuevo contenido, pero sí devuelve el nuevo Content-Length en sus encabezados, lo que da como resultado que se muestre basura. Si comprimo el archivo usando mod_compress, el problema desaparece ya que mod_compress usa su propio sistema de almacenamiento en caché. Desafortunadamente, no puedo comprimir todos los archivos (archivos de imagen, por ejemplo). Por lo tanto, es solo una solución parcial, pero volveré sobre ello más tarde y encontraré una solución.