Я думаю начать использовать Varnish на своих сайтах. Я только что попробовал Varnish, и мне интересно, как кэшировать страницы, даже если мои веб-сайты используют файлы cookie для Google Analytics. Я пытаюсь удалить их, но похоже, что Varnish не кешируется. Так выглядит моя конфигурация; http://pastie.org/1254664. Если это важно, у меня есть один сервер Debian и один сервер с Ubuntu Server. Итак, как мне кэшировать сайт, даже если я использую файлы cookie?
Заранее спасибо!
Дополнение: у меня тоже нет X-Cache: HIT / MISS. Что я делаю не так?
Я новичок в кэшировании с помощью Varnish, но вот что я узнал до сих пор. При использовании Varnish для кэширования в приложении необходимо учитывать несколько факторов.
В вашем случае знайте, какие файлы cookie устанавливаются и с какой целью. Если varnish видит cookie с вашим запросом, вы будете переданы на бэкэнд, что приведет к промаху кеша.
Файлы cookie Google Analytics
Если вы используете файлы cookie Google Analytics, вы можете безопасно отключить их в Varnish; не волнуйтесь, у вас останутся данные в отчетах GA. Используйте что-то подобное в своем vcl_recv
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a)=[^;]*", "");
Вы можете попробовать еще пару строк очистки, также в vcl_recv
Удалять ";" префиксы из файлов cookie
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
Отключить пустые куки
if (req.http.Cookie ~ "^\s*$") {
unset req.http.Cookie;
}
Файлы cookie для конкретных приложений
Если ваше приложение устанавливает cookie, когда пользователь входит в систему для выполнения функции, эти запросы должны не кэшироваться и напрямую отправляться на серверную часть. В противном случае вы могли бы кешировать страницы, просматриваемые авторизованными пользователями (плохо).
Используйте что-то вроде этого:
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
HTH и удачи.
редактировать
Используйте это, чтобы увидеть, через что проходит лак для печенья:
varnishtop -i RxHeader -I Cookie
Если в вашем регулярном выражении что-то отсутствует, поймайте их здесь!
Вот для чего нужен заголовок Vary в http: варианты, которые должны возвращать один и тот же ресурс. Лак понимает Vary: cookies
.
Если вы не получаете заголовки X-Cache, возможно, вы вообще не подключаетесь к кешу; вы уверены, что он работает на правильном ip / порту?
Не знаю насчет Лака. Но согласно моему опыту в администрировании серверов, сначала попробуйте все это в своей локальной сети, а не переходите в Интернет.
Вы можете передать некоторые части вашего сайта в бэкэнд без кеширования.
Самый простой пример для блоков vcl_recv и vcl_fetch:
sub vcl_recv {
if (req.url ~ "^/somescript.php") {
return (pass);
}
else {
unset req.http.Cookie;
}
return(lookup);
}
sub vcl_fetch {
if (req.url ~ "^/somescript.php") {
return (pass);
}
else {
unset req.http.Cookie;
}
return(deliver);
}
Читать - прочитайте это чтобы понять, почему не хватает Лака
бегать лак и посмотрите, действительно ли вы проходите через лак
Я рекомендую проверить, для каких URL-адресов вам действительно нужны файлы cookie (например, панель администрирования), и удалить файлы cookie для всех остальных URL-адресов. См. Пример ниже:
sub vcl_recv {
if (req.url ~ "^/admin/") {
# administration panel
set req.http.admin = 1;
} else {
# public web site, ignore client request for fresh content, remove cookies
unset req.http.Cache-Control;
unset req.http.Max-Age;
unset req.http.Pragma;
unset req.http.Cookie;
}
...
}
sub vcl_fetch {
if (req.http.admin == 1) {
# administration panel
return (hit_for_pass);
} else {
# public web site, not allowed to set cookies
unset beresp.http.Set-Cookie;
...
}
...
}