Назад | Перейти на главную страницу

Перенаправление в лаке на основе значения cookie

У нас есть лак перед нашим сайтом, и мы обязательно должны кэшировать как можно больше.

Недавно мы решили отказаться от перенаправления GeoIP для межгосударственного контента и перейти на более традиционную страницу «Выберите свое местоположение». Эта страница устанавливает cookie для их местоположения "по умолчанию", и желаемый результат будет заключаться в том, чтобы varnish прочитал этот файл cookie и перенаправил его только в случае "/".

Предполагается, что эта функция (хотя и немного хакерская) будет поддерживаться в varnish, но нам не удалось заставить ее работать. Должно ли работать? Делаем ли мы то, чего не должны делать?

Какие еще у нас есть варианты, помимо некэшированной статической HTML-страницы? Можно еще что-нибудь, кроме лака, посидеть перед просто эта страница?

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

Если установлено, что лак должен Делаем то, что хотим, я добавлю к этому вопросу конфигурацию vcl.

РЕДАКТИРОВАТЬ Похоже, что лучшим вариантом будет заставить varnish не кэшировать '/' и обрабатывать перенаправление на основе файлов cookie в Apache.

RewriteCond %{REQUEST_URI} ^/?$
RewriteCond %{HTTP_COOKIE} cookie_name=([^;]+)
RewriteRule .* http://site/%1 [R=301,L]

Кажется, делаем то, что нам нужно.

Этого можно добиться с помощью Varnish более или менее:

sub vcl_recv {
  if ( req.http.cookie ~ "cookie_name") {
    error 751 "http://site" + req.url;
  }
}
sub vcl_error {
  if (obj.status == 751) {
    /* Get new URL from the response */
    set obj.http.Location = obj.response;
    /* Set HTTP 301 for permanent redirect */
    set obj.status = 301;
    return(deliver);
  }
}