Re: Патч ETags в NixOS

izorkin на gmail.com izorkin на gmail.com
Сб Ноя 25 09:57:45 UTC 2023


Здравствуйте, Максим.

Вариант использования полного пути в URI выглядит не очень удобно.

Второй вариант с использованием `$realpath_root` работает, но
как сделать так, чтобы генерировался хэш от значения `$realpath_root`,
в противном случае отображается для всех полный путь к файлу, не
думаю, что такой вариант не безопасен:
  add_header ETag $realpath_root;

К тому же это надо дополнительно везде прописывать add_header,
пользователь легко может упустить в конфигурации места, где надо
его изменить.

Судя по коду в src/http/ngx_http_core_module.c для генерации ETag
используется только время модификации файла и его размер. А вот
путь до файл не учитывается.
Как можно попробовать добавить возможность учитывать полный путь до
файла для проверки? Может подойдёт такой вариант:
ETag = путь к файлу + размер файла + время модификации файла.

Если подойдёт, тогда всё будет работать автоматически.

Вы писали 25 ноября 2023 г., 3:59:57:

> Hello!

> On Tue, Nov 21, 2023 at 09:53:16PM +0300, izorkin на gmail.com wrote:

> Если размера для идентификации версии файла недостаточно, то 
> ожидаемо нужны другие идентификаторы.  В классических файловых 
> системах таким идентификатором выступает время модификации файла.

> В /nix/store, как я понимаю, идея состоит в том, что время 
> модификации не нужно, потому что файлы в рамках конкретного пути 
> не меняются.  Решением, целиком повторяющим эту идею, будет 
> использование полного пути из /nix/store в URI, тогда всё будет 
> работать так, как ожидают создатели /nix/store.

> Если же хочется выкинуть из URI полный путь, то наверное имеет 
> смысл думать в сторону возможности установки ETag'а из переменных
> (сейчас его можно поменять в ответе клиенту, но это происходит 
> после проверок If-Modified-Since / If-None-Match, и выставленное 
> значение не используется самим nginx'ом).  Тогда можно будет 
> поставить и использовать произвольный ETag, основываясь, например, 
> на переменной $realpath_root - то есть сделать штатными средствами 
> примерно то же, что пытались накостылить авторы соответствующего 
> патча в NixOS.


-- 
С уважением,
 Izorkin                          mailto:izorkin на gmail.com


Подробная информация о списке рассылки nginx-ru