Re: fastcgi cache background update ssi подзапросов

Roman Arutyunyan arut at nginx.com
Wed May 10 17:18:46 UTC 2017


Добрый день,

On Wed, May 10, 2017 at 12:04:39PM -0400, metalfm1 wrote:
> Приветствую!
> 
> Директива fastcgi_cache_background_update странно ведёт себя при ssi
> подзапросах.
> Есть сервис со сложной бизнес логикой, главная страница загружается 1 сек,
> стек nginx + php-fpm. В ходе оптимизации скорости загрузки было решено
> вынести генерацию самого долгого куска страницы в отдельный ssi подзапрос и
> кешировать его на 1 час. Кешированием управляет fastcgi сервер на php с
> помощью заголовка Cache-Control. 
> 
> С кеширование проблем нет, nginx успешно кеширует подзапросы /ssi_dev/ и
> складывает их на диск. Проблемы начинаются когда кеш протухает.
> 
> Текущее поведение nginx
> - если есть элемент в кеше, то он успешно отдается(HIT)
> - если есть элемент в кеше, но он устарел, то клиенту отдаётся устаревшая
> версия(STALE) и делается подзапрос на прогрев кеша(EXPIRED)
> 
> Проблема заключается в том, что подзапрос на прогрев кеша выполняется в
> блокирующем режиме. То есть основной запрос ждёт выполнения подзапроса.
> Указанная выше проблема не наблюдается, если в кеш класть всю страницу,
> поведение nginx соответствует документации. Клиенту отдаётся старая версия
> контента и делается неблокирующий подзапрос на обновление.

На текущий момент background update реализован так, что он блокирует основной
запрос, если запущен в подзапросе.  Это как раз ваш случай.
В таск https://trac.nginx.org/nginx/ticket/1249 я аттачил патч, который должен
это вылечить.

[..]

-- 
Roman Arutyunyan


More information about the nginx mailing list