Я успешно установил varnish 4 на моем nginx 1.6.2, он работает, но согласно тесту на
http://www.isvarnishworking.com/
это показывает
Varnish, похоже, отвечает по этому URL-адресу, но значение max-age заголовка Cache-Control меньше 1, что означает, что Varnish никогда не будет обслуживать контент из кеша по этому URL-адресу.
Максимальное значение возраста выглядит следующим образом: 0
Это может быть сделано намеренно, но если вы хотите, чтобы Varnish кэшировал этот URL-адрес, вам придется исправить значение максимального возраста, которое приложение отправляет в Varnish.
Это означает, что он не работает, но не так, как ожидалось, и для него выполнялся поиск файлов конфигурации, но из-за огромных изменений в версии 4 varnish эти файлы конфигурации не работают.
Пожалуйста, помогите мне, ребята.
Спасибо
Я знаю, что воскрешаю старый пост, но хотел бы поместить его здесь для всех, кто сталкивается с той же проблемой.
Сначала вы захотите удалить файлы cookie для пользователей, которые не вошли в систему. Вот раздел из моей подпрограммы vcl_recv:
sub vcl_recv {
# Some wordpress URL manipulation
if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
set req.url = regsub(req.url, "\?.*$", "");
}
# Pass if the page is login, admin, preview, search or xmlrpc
if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "\?s=" || req.url ~ "xmlrpc.php") {
return (pass);
}
# Some generic URL manipulation, useful for all templates that follow
# First remove the Google Analytics added parameters, useless for our backend
if (req.url ~ "(\?|&)(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=") {
set req.url = regsuball(req.url, "&(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "");
set req.url = regsuball(req.url, "\?(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "?");
set req.url = regsub(req.url, "\?&", "?");
set req.url = regsub(req.url, "\?$", "");
}
# Strip hash, server doesn't need it.
if (req.url ~ "\#") {
set req.url = regsub(req.url, "\#.*$", "");
}
# Strip a trailing ? if it exists
if (req.url ~ "\?$") {
set req.url = regsub(req.url, "\?$", "");
}
# Remove the wp-settings-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");
# Remove the wp-settings-time-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", "");
# Remove the wp test cookie
set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", "");
# Remove the cloudflare cookie
set req.http.Cookie = regsuball(req.http.Cookie, "__cfduid=[^;]+(; )?", "");
# Remove the PHPSESSID in members area cookie
set req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID=[^;]+(; )?", "");
# Remove the Quant Capital cookies (added by some plugin, all __qca)
set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");
# Are there cookies left with only spaces or that are empty?
if (req.http.cookie ~ "^\s*$") {
unset req.http.cookie;
}
#Drop ALL cookies sent to WordPress, except those originating from the URLs defined.
if (!(req.url ~ "(wp-login|wp-admin|cart|my-account|checkout|addons|wordpress-social-login|wp-login\.php|forumPM|members)")) {
unset req.http.cookie;
}
}
Также в своем ответе серверной части вы хотите удалить файлы cookie, если вы не вошли в систему. Также необходимо указать varnish для установки TTL для beresp, чтобы Age не всегда отображал 0.
sub vcl_backend_response {
if (!(bereq.url ~ "(wp-(login|admin)|login)")) {
unset beresp.http.set-cookie;
}
set beresp.ttl = 1h;
return (deliver);
}
Это основы.
По умолчанию WordPress отправляет каждый посетитель - Cookie, который заставляет Varnish думать, что каждый посетитель уникален и, следовательно, не должен кэшироваться.
Чтобы получить какие-либо преимущества от Varnish, вам необходимо переопределить это поведение и «отключить» или «удалить» файлы cookie, когда HTTP-запрос входит в Varnish.
Об этом много написано в Интернете, есть множество VCL-файлов и примеров Varnish, один из которых вы можете найти здесь: https://www.varnish-cache.org/trac/wiki/VCLExampleTemplateWordpressNopurge
Удачи!
Решение этой проблемы заключается не в правильной настройке Varnish. Это слишком сильное заявление - вы мог исправьте это в Varnish. Но не стоит.
Проблема в том, что WordPress отправляет заголовок, который не позволяет Varnish кэшировать доставляемый объект. Вам нужно будет отследить, где в WordPress создается этот заголовок, и изменить, отключить или переопределить его.