Лак 301 редирект отображает белую страницу
Мы используем лак в качестве балансировщика нагрузки (среди прочего), но в данный момент мы получаем какое-то странное поведение.
У нас есть скрипт, который вызывается с некоторыми параметрами, и в зависимости от того, какие Пармы вы передаете, вы перенаправляетесь в другое место с помощью 301 redirect (это делается с помощью php-скрипта и функции header ())
Проблема заключается в том, что при первом вызове URL-адреса происходит перенаправление 301, но затем при следующем вызове того же URL-адреса вы получаете состояние 200 OK, перенаправление не происходит, и отображается только белая страница.
Я добавил session_start () в верхнюю часть php-скрипта, чтобы попытаться остановить лак от кэширования страницы, но пока ничего не помогло.
Я провел некоторые исследования по этому вопросу и увидел, что несколько человек испытывают одну и ту же проблему, но я пока не смог найти решение.Как бы я добрался до остановки кэширования страницы?
Любая помощь в правильном направлении будет оценена по достоинству.
3 ответа:
Не могли бы Вы исключить этот url из кэша лаков?
Добавьте что-то вроде следующего к вашему значению по умолчанию.vcl (или как там называется ваш файл конфигурации лака).
sub vcl_recv { if(req.url ~"^/thatpagethatredirects") { return (pass); } }
Это должно остановить кэширование лаком этого url.
Можно попробовать найти url-адрес, на который перенаправляется лак, и добавить к нему строку запроса со случайно сгенерированным номером.
Пример:
<?php $random_number = rand(10000, 99999999); // This is what the redirect code MIGHT look like, but I doubt it. header("Location: http://www.example.com/index.php?cache=$random_number"); ?>
Если вы можете найти, где страница фактически выполняет перенаправление, и вы добавляете строку запроса со случайным числом, она должна исправить ситуацию. Я использовал этот метод, чтобы убедиться, что изображения не кэшируются в прошлом, и он всегда работал для меня идеально.
О, и если вы не можете найти код перенаправления, который лак использует сам себя. Вы можете попробовать добавить это на страницу, которая загружается после 301 перенаправления:
<?php $random_number = rand(10000, 99999999); header("Location: NAME_OF_THIS_SCRIPT.php?cache=$random_number"); ?>
В значительной степени та же идея, только включает в себя меньше охоты вокруг. Хотя я не уверен, что это нарушит функцию балансировки нагрузки лака.
Это довольно неудобно и должно работать правильно по умолчанию. Вы можете рассказать нам, какую версию лак вы используете, и если вы создали пользовательский файл vcl?
Ошибка, вероятно, была введена в vcl_fetch. Это должно проверить на кэшируемость с помощью таких проверок, как:
sub vcl_fetch { ... if (req.status >= 300 ) { return pass; } if ( ! obj.cacheable ) { return pass; } .. }