<div dir="ltr"><div class="gmail_extra"><a href="https://mailman.nginx.org/mailman/listinfo/nginx-ru">https://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><font size="1"><span style="color:rgb(102,102,102)">---<br></span><b><span style="color:rgb(102,102,102)">B. R.</span></b><span style="color:rgb(102,102,102)"></span></font></div></div>
<br><div class="gmail_quote">2017-05-10 19:18 GMT+02:00 Roman Arutyunyan <span dir="ltr"><<a href="mailto:arut@nginx.com" target="_blank">arut@nginx.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Добрый день,<br>
<span class=""><br>
On Wed, May 10, 2017 at 12:04:39PM -0400, metalfm1 wrote:<br>
> Приветствую!<br>
><br>
> Директива fastcgi_cache_background_<wbr>update странно ведёт себя при ssi<br>
> подзапросах.<br>
> Есть сервис со сложной бизнес логикой, главная страница загружается 1 сек,<br>
> стек nginx + php-fpm. В ходе оптимизации скорости загрузки было решено<br>
> вынести генерацию самого долгого куска страницы в отдельный ssi подзапрос и<br>
> кешировать его на 1 час. Кешированием управляет fastcgi сервер на php с<br>
> помощью заголовка Cache-Control.<br>
><br>
> С кеширование проблем нет, nginx успешно кеширует подзапросы /ssi_dev/ и<br>
> складывает их на диск. Проблемы начинаются когда кеш протухает.<br>
><br>
> Текущее поведение nginx<br>
> - если есть элемент в кеше, то он успешно отдается(HIT)<br>
> - если есть элемент в кеше, но он устарел, то клиенту отдаётся устаревшая<br>
> версия(STALE) и делается подзапрос на прогрев кеша(EXPIRED)<br>
><br>
> Проблема заключается в том, что подзапрос на прогрев кеша выполняется в<br>
> блокирующем режиме. То есть основной запрос ждёт выполнения подзапроса.<br>
> Указанная выше проблема не наблюдается, если в кеш класть всю страницу,<br>
> поведение nginx соответствует документации. Клиенту отдаётся старая версия<br>
> контента и делается неблокирующий подзапрос на обновление.<br>
<br>
</span>На текущий момент background update реализован так, что он блокирует основной<br>
запрос, если запущен в подзапросе.  Это как раз ваш случай.<br>
В таск <a href="https://trac.nginx.org/nginx/ticket/1249" rel="noreferrer" target="_blank">https://trac.nginx.org/nginx/<wbr>ticket/1249</a> я аттачил патч, который должен<br>
это вылечить.<br>
<br>
[..]<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Roman Arutyunyan<br>
</font></span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx</a></div></div></blockquote></div><br></div></div>