> Это не подзапрос баннера. Это подзапрос > 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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru