Hello!

On Tue, Nov 21, 2023 at 09:53:16PM +0300, izor...@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 mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить