Недавно я переключил веб-сайт с обычного PHP на WordPress. Внешний вид лака такой же, за исключением правил для wp-admin.
Я считаю, что попадание в кеш уникально для моего соединения, и количество обращений заметно увеличивается для меня и друга, просматривающего один и тот же сайт, но на разных машинах.
Я попытался изменить vcl_hash и сократил его до простого
sub vcl_hash {
set req.hash += req.url;
set req.hash += req.http.host;
}
Тем не менее, обслуживаемый кеш уникален для нас обоих. Это означает, что если я вижу счетчик попаданий, скажем, «10», то следующим попаданием моего друга в идеале должно быть «11»; но он получает "1" в качестве счетчика обращений, и он увеличивается до "2" и так далее, если он продолжает обновлять страницу
Я надеюсь, что кто-нибудь поможет мне понять, почему это происходит. Похоже, это происходит и с другими сайтами wordpress. Я обратил на это внимание в связи с переходом с php на Wordpress.
Если ваш внутренний сервер - Apache + Wordpress, и вы используете mod_deflate, проверьте его заголовки Vary.
Если в заголовке Vary отображается «пользовательский агент» или «cookie», тогда Varnish будет кэшировать в соответствии с пользовательским агентом. Вы можете отменить установку в Apache (edit: или в vcl_fetch в лаке, хотя я не пробовал). Я добился успеха с использованием setEnv в конфигурации виртуального хоста.
setEnv force-no-vary
Но я заметил, что этот параметр изменяет версию HTTP на HTTP / 1.0. Однако я не использую такую функцию, как Keep-Alive, поэтому это не имело большого значения. Я думаю, что в конечном итоге удаленный клиент получит HTTP / 1.1 с Varnish между ними (поправьте меня, если я ошибаюсь).
Если вы устанавливаете файлы cookie, возможно, вы захотите поступить иначе.
Вы должны помнить, что VCL по умолчанию для varnish добавляется к вашему пользовательскому VCL, если вы не выполняете return
действие.
Итак, в вашем случае (я думаю, вы используете Varnish 2.x из-за синтаксиса), вы, вероятно, не очищаете файлы cookie запросов, а VCL по умолчанию их хеширует. (Будет лучше изучить вашу полную конфигурацию VCL и примененный default.vcl)
Вы можете попробовать кое-что.
Добавить действие возврата
sub vcl_hash {
set req.hash += req.url;
set req.hash += req.http.host;
return (hash);
}
Условное хеширование
sub vcl_hash {
if ( ! req.url ~ "wp-admin") {
set req.hash += req.url;
set req.hash += req.http.host;
return (hash);
}
}
Очистка файлов cookie
sub vcl_recv {
# ...
# Before reurning a lookup
if ( ! req.url ~ "wp-admin") {
unset req.http.Cookie;
}
# ...
}
Прокомментируйте свою хеш-функцию (если она вам не нужна) и повторите попытку. Хеш - это то, что делает хиты уникальный для этого запроса.