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

Перед нашим сайтом находится лак, и крайне важно, чтобы мы кэшировали как можно больше.

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

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

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

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

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

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

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

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

1 ответ

Это может быть идеально достигнуто на 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);
  }
}
Другие вопросы по тегам