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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru