Лак 301 редирект отображает белую страницу


Мы используем лак в качестве балансировщика нагрузки (среди прочего), но в данный момент мы получаем какое-то странное поведение.

У нас есть скрипт, который вызывается с некоторыми параметрами, и в зависимости от того, какие Пармы вы передаете, вы перенаправляетесь в другое место с помощью 301 redirect (это делается с помощью php-скрипта и функции header ())

Проблема заключается в том, что при первом вызове URL-адреса происходит перенаправление 301, но затем при следующем вызове того же URL-адреса вы получаете состояние 200 OK, перенаправление не происходит, и отображается только белая страница.

Я добавил session_start () в верхнюю часть php-скрипта, чтобы попытаться остановить лак от кэширования страницы, но пока ничего не помогло.

Я провел некоторые исследования по этому вопросу и увидел, что несколько человек испытывают одну и ту же проблему, но я пока не смог найти решение.

Как бы я добрался до остановки кэширования страницы?
Любая помощь в правильном направлении будет оценена по достоинству.

3 2

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;
  }
  ..
}