proxy_cache_purge

Igor A. Ippolitov iippolitov на nginx.com
Вт Июл 31 14:58:24 UTC 2018


On 31.07.2018 16:11, Gena Makhomed wrote:
> On 30.07.2018 19:59, Igor A. Ippolitov wrote:
>
>>>> Мне кажется, что proxy_cache_bypass легко позволяет замещать 
>>>> контент в кэше (что и делает purge, в широком смысле).
>
>>> Замещать существующий контент или добавлять новый - да.
>>> Но удалять не позволяет, в этом и состоит (небольшое) отличие.
>
>> Но ведь какой-то ответ на запрос "пурженного" контента всё равно 
>> придёт клиенту? Почему бы не закэшить сразу его.
>
> Потому что как правило объем кэша меньше объема сайта и поэтому имеет
> смысл держать в кэше только то, что реально запрашивается клиентами.
>
> У бекенда нет возможности узнать, ответ бекенда по какому-то урлу
> еще лежит в кэше или его там уже давно нет. В результате "замещение"
> контента в кэше через proxy_cache_bypass может быть на самом деле
> не замещением старого контента, а добавлением туда нового контента
> и вымыванием из кэша другого контента, который реально запрашивался
> клиентами, что ведет к уменьшению эффективности работы кэша nginx.
Если задаться целью избежать добавления нового контента, можно 
самостоятельно считать md5 от ключа кэша и проверять наличие этого 
файла. Подобные вычисления можно делать в njs.
Подобные же решения можно использовать для создания решений, для которых 
нет "подходящих по названию" директив в nginx.
>
>> Или условную болванку с max-age:0, которая будет обновлена по первому же
>> запросу от клиента
>
Тут поправлю сам себя: max-age должен быть больше 0, что создаёт 
дополнительные сложности.

> и при proxy_cache_use_stale updating; эта болванка будет отдана клиенту.
>
> а proxy_cache_lock действует только при заполнении нового элемента кэша.
В отношении proxy_cache_use_stale updating - не могу сказать ничего 
конструктивного.
Если вас устраивает stale контент, то смысл его purge'ить?
А если stale не устраивает, то зачем включать proxy_cache_use_stale 
updating?
Кроме того, есть Cache-Control: stale-while-revalidate, который тоже 
может быть полезен.

С выкидыванием proxy_cache_use_stale жизнь дополнительно упрощается тем, 
что proxy_cache_lock будет работать ожидаемым образом.

>
>> На первый взгляд, PURGE не кажется необходимым средством.
>> Хотя, вероятно. может упростить жизнь в каких-то конфигурациях.
>
> proxy_cache_purge необходимым средством не является,
> без него можно обойтись - ценой снижения эффективности кэша,
> например, поставив небольшое время жизни элементов внутри кэша,
> или обновляя через proxy_cache_bypass в кэше те элементы,
> которые по-нормальному надо было бы оттуда просто удалять.
>
>>>>> Директиву proxy_cache_purge
>>>>> можете сделать доступной в open source версии nginx?
>



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