У нас есть лак перед нашим сайтом, и мы обязательно должны кэшировать как можно больше.
Недавно мы решили отказаться от перенаправления 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);
}
}