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

Varnish caching wordpress site для каждого пользователя или UA (я не уверен). Хочу, чтобы кеширование было универсальным

Недавно я переключил веб-сайт с обычного 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;
   }
   # ...
}

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