Перенаправление лака 301 отображает белую страницу - PullRequest
2 голосов
/ 29 октября 2011

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 29 октября 2011

Не могли бы вы исключить этот URL из кэша лака?

Добавьте что-то вроде следующего в ваш default.vcl (или как называется ваш конфигурационный файл лака).

sub vcl_recv {
    if(req.url ~"^/thatpagethatredirects") {
        return (pass);
    }
}

Это должно остановить кэширование лака, который URL.

0 голосов
/ 29 октября 2011

Это довольно неловко и по умолчанию должно работать правильно. Можете ли вы сказать нам, какую версию Varnish вы используете и создали ли вы собственный файл vcl?

Ошибка, вероятно, была введена в vcl_fetch. Это должно проверить кешируемость с помощью проверок типа:

sub vcl_fetch {
  ...
  if (req.status >= 300 ) {
    return pass;
  }

  if ( ! obj.cacheable ) {
    return pass;
  }
  ..
}
0 голосов
/ 29 октября 2011

Вы можете попытаться найти 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");
?>

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

...