On 31.07.2018 17:58, Igor A. Ippolitov wrote:

У бекенда нет возможности узнать, ответ бекенда по какому-то урлу
еще лежит в кэше или его там уже давно нет. В результате "замещение"
контента в кэше через proxy_cache_bypass может быть на самом деле
не замещением старого контента, а добавлением туда нового контента
и вымыванием из кэша другого контента, который реально запрашивался
клиентами, что ведет к уменьшению эффективности работы кэша nginx.

Если задаться целью избежать добавления нового контента, можно самостоятельно считать md5 от ключа кэша и проверять наличие этого файла. Подобные вычисления можно делать в njs.

Или просто самим backend`ом вычислять md5 от ключа и удалять файл
из /var/cache/nginx/ - таким способом тоже должно все работать.

и при proxy_cache_use_stale updating; эта болванка будет отдана клиенту.
а proxy_cache_lock действует только при заполнении нового элемента кэша.

В отношении proxy_cache_use_stale updating - не могу сказать ничего конструктивного.
Если вас устраивает stale контент, то смысл его purge'ить?

Насколько я понимаю, если сделать purge для какого-то элемента кэша -
то он не будет stale, а его в кэше не будет тогда вообще. Разве нет?

stale контент будет использоваться очень непродолжительное
время, только пока обновляется этот элемент кэша с backend`а.

Кэш в nginx мне интересен прежде всего на тех сайтах,
которые находятся / могут находиться под DDoS-атакой.

proxy_cache_lock работает только при заполнении нового элемента кэша,
поэтому мне приходится использовать proxy_cache_use_stale updating,
иначе на backend свалится огромное количество запросов и он упадет.

Если бы была возможность легко сделать purge для элемента кэша,
тогда можно было бы средствами nginx выствлять большее время
жизни для элементов кеша nginx и средствами backend`а их удалять
как только они потеряют свою валидность.

А если stale не устраивает, то зачем включать proxy_cache_use_stale updating?

У меня есть небольшой выбор - или использовать stale контент,
или backend будет нерабочий из-за большого количества запросов.

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

proxy_cache_lock и сейчас работает именно так, как это описано
в документации к nginx, - только для новых элементов кэша.

Если убрать proxy_cache_use_stale updating тогда на backend будет идти
огромное количество запросов и proxy_cache_lock тут никак не поможет.

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить