Re: Некорректный ответ при использовании fastcgi cache background update on
gz
nginx-forum на forum.nginx.org
Вт Апр 17 16:17:29 UTC 2018
> Это не подзапрос баннера. Это подзапрос
> fastcgi_cache_background_update. Но в нём используются те же
> переменные, что уже перезаписаны подзапросом баннера, и в
> результате на бэкенд уходит неправильное значение переменной
> PATH_TRANSLATED. И бэкенд, в свою очередь, отвечает на него в
> соответствии с этим неправильным значением.
Вот теперь, кажется, понимаю.
Фоновый подзапрос обновления всей страницы получает переопределённые
переменные окружения и вместо генерации страницы генерирует пустой баннер,
который сохраняется в кэш.
> Наиболее простое решение - использовать отдельный location для
> баннеров с отдельными же переменными.
Так и сделано
(https://forum.nginx.org/read.php?21,279356,279363#msg-279363):
location /banner/ {
internal;
fastcgi_cache banner;
fastcgi_cache_valid 200 24h;
fastcgi_cache_key '$uri$is_args$args';
set $handler banner.html;
set $querystring $args;
fastcgi_param REQUEST_URI $uri$is_args$args;
fastcgi_param SCRIPT_NAME $uri$is_args$args;
fastcgi_param PATH_INFO $uri$is_args$args;
include parser;
fastcgi_pass fcgiwrap;
}
> Наиболее правильное -
> переписать логику так, чтобы нужные бэкенду значения вычислялись
> не с помощью set, а с помощью map { volatile; ... }.
Ясно, значения не будут кэшироваться и можно будет получить корректные
переменные окружения для каждого подзапроса.
Спасибо, попробую.
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,279356,279490#msg-279490
Подробная информация о списке рассылки nginx-ru