Ich verwende lighttpd, um statische Dateien bereitzustellen. Ich habe eine Reihe von Bildern in einem Verzeichnis, die ich regelmäßig aktualisiere. Dadurch werden der Dateiinhalt (und die Dateigröße) sowie das Änderungsdatum geändert, nicht jedoch der Dateiname.
Wenn ich über http auf die Dateien zugreife, werden die Updates nicht berücksichtigt und lighty stellt die alte Datei bereit. Ich kann die Datei manuell in etwas anderes umbenennen, dann gibt lighttpd einen 404-Fehler zurück, und wenn ich meine Datei wieder umbenenne, erhalte ich die richtige aktualisierte Version. Es scheint, als würde lightty einen eigenen Cache-Mechanismus verwenden (was in Ordnung ist), um statische Dateien zurückzugeben. Leider scheint sich dieser Mechanismus nicht selbst zu aktualisieren, wenn Dateien geändert werden.
Ich habe über Wireshark nachgesehen und mein Browser sendet tatsächlich eine Anfrage an die Datei. Dies ist kein Problem beim Zwischenspeichern des Browsers. Es gibt ein 200 OK zurück, wenn es aus einem leeren Cache angefordert wird, und ein 304 Not Modified andernfalls, wie erwartet. Die Datei wird jedoch mit einem falschen Header für die letzte Änderung zurückgegeben, der nicht das tatsächliche Datum der letzten Änderung widerspiegelt.
Vielleicht gibt es eine Konfigurationsanweisung, die mir nicht bekannt ist?
Ich möchte, dass die von lighty zurückgegebenen Dateien die auf der Festplatte vorgenommenen Änderungen direkt widerspiegeln oder zumindest den Cache ungültig machen können.
Update für alle, die diese Frage beantworten: Ich habe einen Schuldigen gefunden. Wenn ich eine statische Datei aktualisiere, gibt Lighty den neuen Inhalt nicht zurück, sondern die neue Inhaltslänge in den Kopfzeilen, was dazu führt, dass Müll angezeigt wird. Wenn ich die Datei mit mod_compress komprimiere, verschwindet das Problem, da mod_compress ein eigenes Caching-System verwendet. Leider kann ich nicht alle Dateien komprimieren (z. B. Bilddateien). Es handelt sich also nur um eine teilweise Lösung, aber ich werde später darauf zurückkommen und eine Lösung finden.
Versuchen Sie, das Zwischenspeichern der stat-Engine auf "deaktiviert" zu setzen:
quelle
Diese lighttpd-Option hat bei mir funktioniert
quelle
Probieren Sie diese etag-Einträge aus und sehen Sie, ob sie Ihnen helfen:
Cache-Steuerungsregeln für lighthttpd
quelle