Re: Некорректный ответ при использовании fastcgi cache background update on
Maxim Dounin
mdounin на mdounin.ru
Вт Апр 17 12:37:59 UTC 2018
Hello!
On Mon, Apr 16, 2018 at 04:52:20PM -0400, gz wrote:
> > Вопрос не в том, что используется в ключе кэширования, а в том,
> > что отправляется на бэкенд. И на бэкенд у вас при перезаписи как
> > раз отправляется $handler, установленный в другом подзапросе:
>
> > 2018/04/09 21:29:34 [debug] 16867#16867: *1901 fastcgi param:
> "PATH_TRANSLATED: /var/www/site/www/banner.html"
>
> Не совсем понимаю как результат работы подзапроса, пусть и с перезаписанными
> переменными окружения, может быть помещён в кэш основного запроса.
> Если кэши запроса и подзапроса разные (разные cache_path) да к тому же
> используют разные ключи кэширования.
> То есть, подзапрос баннера вдруг перезаписывает ответ всей страницы.
Это не подзапрос баннера. Это подзапрос
fastcgi_cache_background_update. Но в нём используются те же
переменные, что уже перезаписаны подзапросом баннера, и в
результате на бэкенд уходит неправильное значение переменной
PATH_TRANSLATED. И бэкенд, в свою очередь, отвечает на него в
соответствии с этим неправильным значением.
> То, куда попадёт ответ подзапроса зависит от PATH_TRANSLATED?
Нет. Он неё зависит, что у вас отвечает бэкенд.
> > Бэкенд возвращает пустой ответ, и этот ответ попадает в кэш. То
> > есть всё ровно так, как я и предполагал. Нужно исправлять
> > конфигурацию так, чтобы запрос на бэкенд не использовал
> > переменных, которые могут быть переписаны другими подзапросами.
>
> Не уверен, что это возможно.
> FCGI-приложение требует этих переменных для своей работы.
Наиболее простое решение - использовать отдельный location для
баннеров с отдельными же переменными. Наиболее правильное -
переписать логику так, чтобы нужные бэкенду значения вычислялись
не с помощью set, а с помощью map { volatile; ... }.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru