Патч ETags в NixOS
Maxim Dounin
mdounin на mdounin.ru
Сб Янв 13 13:21:12 UTC 2024
Hello!
On Sat, Jan 13, 2024 at 10:34:08AM +0300, izorkin на gmail.com wrote:
> Добрый день, Максим.
>
> Вы писали 13 января 2024 г., 3:28:36:
>
> > Hello!
>
> > Hash-сумма файла в качестве ETag - в целом отличное решение,
> > проблема тут ровно одна: её нужно как-то получить, ибо системный
> > вызов fstat() никаких hash-сумм почему-то не возвращает. Считать
> > на лету - очевидно, плохой вариант для нагруженного сервера, так
> > как файл придётся на каждый запрос читать дважды. А получать
> > hash-сумму откуда-то ещё, скажем из внешнего файла или
> > extended-атрибутов - выглядит в лучшем случае дополнительной фичей
> > (смотри https://trac.nginx.org/nginx/ticket/2351 например).
>
> Теоретически можно было бы сделать предварительное сканирование
> файлов и генерация хэш сумм при старте в фоновом режиме, для тех
> файлов, которыее расположены только в /nix/store или любой другой
> директории, указанной пользователем. А результаты сохранить в кеш.
>
> Если генерировать хэш-сумму на лету, то зачем надо генерировать её
> каждый раз при повторном запросе? Можно же в кэше результат сохранить.
> Да и это надо делать только для тех файлов, которые имеют нулевую дату.
> А файлы в /nix/store меняются не часто, только при обновлении ОС.
Всё это предполагает какой-то кэш, который надо как-то отдельно
делать и конфигурировать, и выглядит в лучшем случае
дополнительной фичей.
> Вариант с файлами хэш-сумм выглядит более оптимальным. При генерации
> файлов в /nix/store можно дополнительно добавить возможность генерации
> хэш-суммы для каждого файла, который требуется для работы сайта. Таким
> же способом в некоторых приложениях организована генерация статических
> файлов в gzip и brotli форматы.
Именно об этом и тикет, да. Мне тоже вариант с файлами кажется
более интересным - с extended-атрибутами, возможно, код будет чуть
проще и, вероятно, быстрее, в силу меньшего количества необходимых
системных вызовов, но там сразу возникает масса проблем как с
портабельностью, так и с хранением/синхронизацией (e.g., в том же
nix store они могут просто не работать).
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru