Я использую lighttpd для обслуживания статических файлов. У меня есть куча изображений в каталоге, которые я регулярно обновляю. Это изменит содержимое файла (и размер файла), а также дату изменения, но не их имя файла.
Когда я получаю доступ к файлам через http, обновления не принимаются во внимание и lighty обслуживает старый файл. Я могу вручную переименовать файл во что-то другое, тогда lighttpd выдаст ошибку 404, и если я переименую свой файл обратно, я получу правильную обновленную версию. Похоже, что lightty использует какой-то собственный механизм кеширования (что нормально) для возврата статических файлов. К сожалению, кажется, что этот механизм не обновляется при изменении файлов.
Я проверил через Wireshark, и мой браузер действительно делает запрос к файлу, это не проблема кэширования браузера. Он возвращает 200 OK при запросе его из пустого кэша и 304 Not Modified в противном случае, как и ожидалось. Но файл возвращается с неправильным заголовком Last-Modified, который не отражает реальную дату последней модификации.
Может быть, есть какая-то директива config, о которой я не знаю?
Я хотел бы, чтобы файлы, возвращаемые lighty, отражали изменения, сделанные на диске напрямую, или, по крайней мере, могли сделать его кеш недействительным.
Обновление для всех, кто следит за этим вопросом: я нашел виновника. Если я обновляю статический файл, Lighty не возвращает новый контент, но возвращает новый Content-Length в своих заголовках, что приводит к отображению мусора. Если я сожму файл с помощью mod_compress, проблема исчезнет, так как mod_compress использует свою собственную систему кэширования. К сожалению, я не могу сжать все файлы (например, файлы изображений). Так что это только частичное исправление, но я вернусь к нему позже и быстро найду решение.
Попробуйте установить кеширование статов в «отключен»:
источник
Этот вариант lighttpd работал для меня
источник
Попробуйте эти записи etag и посмотрите, помогут ли они вам:
Правила управления кэшем для lighthttpd
источник