Re: дубли в кэше

Maxim Dounin mdounin на mdounin.ru
Пн Ноя 9 19:35:31 UTC 2015


Hello!

On Mon, Nov 09, 2015 at 10:03:42PM +0300, Anton Kuznetsov wrote:

> Включил логирование Vary - обнаружил ровно два варианта. Четко повторяют
> что передал браузер и соответственно четко следует за моей переменной
> $cache_gzip=0|1-
> вроде бы должно получаться два моих задуманных варианта.

В заголовке Vary указываются заголовки запроса, от которых зависит 
вторичный ключ кеширования.  Т.е. даже при ровно одном варианте, 
Vary:

Vary: Accept-Encoding

количество возможных варинтов ответов начинает определяеться 
количеством возможных значений Accept-Encoding, которые присылает 
клиент.

> 2015-11-09 21:54 GMT+03:00 Anton Kuznetsov <maybe at arjlover.net>:
> 
> > Но позвольте, зачем тогда нужен ключ кэширования? Я же четко сказал от
> > чего он должен зависить? Почему он зависит еще от чего-то?

Явно заданный ключ кеширования работает тогда и только тогда, 
когда мы заранее знаем, от чего зависит ответ бекенда.  В этом 
случае проверку Vary можно выключить, и использовать только явно 
заданный ключ.

Если же результат ответа бекенда заранее не известен, то 
приходится пытаться придумывать что-то, что позволило бы бекенду 
контролировать процесс.

В HTTP/1.1 для этого придуман механизм вариативности ресурсов - 
ресурс может существовать в нескольких вариантах, и с помощью 
заголовка Vary бекенд сообщает о том, от каких именно заголовков 
завист, какой вариант будет выбран.  Механизм, скажем так, не 
очень, и приводит к ужасному дублированию ресурсов при 
кешировании (особенно, если пытаться использовать "Vary: 
User-Agent", как некоторые делают), но уж какой есть.  Задачу свою 
он, так или иначе, выполняет, и позволяет обеспечить корректность 
ответов в общем случае, когда поведение бекенда заранее не 
известно.

Если вам этот механизм не нужен - в nginx'е есть ручка, 
позволяющая поддержку этого механизма выключить, и, 
соответветственно, явно прописать правила руками.

Подробнее тут, как уже говорилось, тут:

http://nginx.org/r/fastcgi_ignore_headers
http://nginx.org/r/fastcgi_cache_valid

-- 
Maxim Dounin
http://nginx.org/



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