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

Рабочая конфигурация Varnish 4 (оптимизирована) для Wordpress (default.vcl)

Я успешно установил 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 создается этот заголовок, и изменить, отключить или переопределить его.