Патч ETags в NixOS
Maxim Dounin
mdounin на mdounin.ru
Сб Ноя 25 00:59:57 UTC 2023
Hello!
On Tue, Nov 21, 2023 at 09:53:16PM +0300, izorkin на gmail.com wrote:
> Да, этот патч, забыл указать ссылку.
> Проверил без патча и добавлением строки `add_header Last-Modified "";`
> В ответе генерируется ETag: "1-4e", "1-75" и т.д. Если после изменения
> содержимого файла без изменения размера, то при запросе отдаётся файл
> из кеша, т.к. при этом ETag не изменяется. А если размер файла меняется,
> кеш обновляется.
> Вариант с использованием хеадера Last-Modified не подходит, может надо
> как-то учитывать путь к файлу для генерации ETag.
Если размера для идентификации версии файла недостаточно, то
ожидаемо нужны другие идентификаторы. В классических файловых
системах таким идентификатором выступает время модификации файла.
В /nix/store, как я понимаю, идея состоит в том, что время
модификации не нужно, потому что файлы в рамках конкретного пути
не меняются. Решением, целиком повторяющим эту идею, будет
использование полного пути из /nix/store в URI, тогда всё будет
работать так, как ожидают создатели /nix/store.
Если же хочется выкинуть из URI полный путь, то наверное имеет
смысл думать в сторону возможности установки ETag'а из переменных
(сейчас его можно поменять в ответе клиенту, но это происходит
после проверок If-Modified-Since / If-None-Match, и выставленное
значение не используется самим nginx'ом). Тогда можно будет
поставить и использовать произвольный ETag, основываясь, например,
на переменной $realpath_root - то есть сделать штатными средствами
примерно то же, что пытались накостылить авторы соответствующего
патча в NixOS.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru