Varnish cache not clearing from magento admin












0
















  • M2 Version : 2.2.2


  • PHP : version : 7.1.26


  • Varnish version : 6.0.2


  • Server : Nginx





  • I have configure varnish in my magento website it working well i have checked in frontend and and passed all test as describe in
    doc.

  • I have setup How Magento cache clearing works with Varnish. but not working let me share my configuration




env.php



<?php
return array (
'backend' =>
array (
'frontName' => 'admin',
),
'crypt' =>
array (
'key' => '226p485aa12738648ac1865cadf6304a
2065c6db0ef584f4804ba9fd703cd112',
),
'db' =>
array (
'table_prefix' => '',
'connection' =>
array (
'default' =>
array (
'host' => 'localhost',
'dbname' => 'test',
'username' => 'test',
'password' => 'pass',
'active' => '1',
'model' => 'mysql4',
'engine' => 'innodb',
'initStatements' => 'SET NAMES utf8;',
),
),
),
'resource' =>
array (
'default_setup' =>
array (
'connection' => 'default',
),
),
'x-frame-options' => 'SAMEORIGIN',
'MAGE_MODE' => 'developer',
'session' =>
array (
'save' => 'redis',
'redis' =>
array (
'host' => '127.0.0.1',
'port' => '6379',
'password' => '',
'timeout' => '2.5',
'persistent_identifier' => '',
'database' => '2',
'compression_threshold' => '2048',
'compression_library' => 'gzip',
'log_level' => '3',
'max_concurrency' => '6',
'break_after_frontend' => '5',
'break_after_adminhtml' => '30',
'first_lifetime' => '600',
'bot_first_lifetime' => '60',
'bot_lifetime' => '7200',
'disable_locking' => '0',
'min_lifetime' => '60',
'max_lifetime' => '2592000',
),
),
'cache_types' =>
array (
'config' => 1,
'layout' => 1,
'block_html' => 1,
'collections' => 1,
'reflection' => 1,
'db_ddl' => 1,
'eav' => 1,
'customer_notification' => 1,
'config_integration' => 1,
'config_integration_api' => 1,
'full_page' => 1,
'translate' => 1,
'config_webservice' => 1,
'compiled_config' => 1,
'cart2quote_license' => 0,
),
'install' =>
array (
'date' => 'Tue, 06 Feb 2018 05:18:03 +0000',
),
'system' =>
array (
'default' =>
array (
'dev' =>
array (
'debug' =>
array (
'debug_logging' => '0',
),
),
),
),
'cache' =>
array (
'frontend' =>
array (
'default' =>
array (
'backend' => 'Cm_Cache_Backend_Redis',
'backend_options' =>
array (
'server' => '127.0.0.1',
'port' => '6379',
'persistent' => '',
'database' => '0',
'password' => '',
'force_standalone' => '0',
'connect_retries' => '1',
'read_timeout' => '10',
'automatic_cleaning_factor' => '0',
'compress_data' => '1',
'compress_tags' => '1',
'compress_threshold' => '20480',
'compression_lib' => 'gzip',
'use_lua' => '0',
),
),
'page_cache' =>
array (
'backend' => 'Cm_Cache_Backend_Redis',
'backend_options' =>
array (
'server' => '127.0.0.1',
'port' => '6379',
'persistent' => '',
'database' => '1',
'password' => '',
'force_standalone' => '0',
'connect_retries' => '1',
'lifetimelimit' => '57600',
'compress_data' => '0',
),
),
),
),
'http_cache_hosts' =>
array (
0 =>
array (
'host' => '127.0.0.1',
'port' => '8080',
),
),
);

varnish.vcl

# VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 5
vcl 4.0;

import std;
# The minimal Varnish version is 5.0
# For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

backend default {
.host = "127.0.0.1";
.port = "8080";
.first_byte_timeout = 600s;
.probe = {
.url = "/health_check.php";
.timeout = 2s;
.interval = 5s;
.window = 10;
.threshold = 5;
}
}

acl purge {
"localhost";
}

sub vcl_recv {
if (req.method == "PURGE") {
if (client.ip !~ purge) {
return (synth(405, "Method not allowed"));
}
# To use the X-Pool header for purging varnish during automated deployments, make sure the X-Pool header
# has been added to the response in your backend server config. This is used, for example, by the
# capistrano-magento2 gem for purging old content from varnish during it's deploy routine.
if (!req.http.X-Magento-Tags-Pattern && !req.http.X-Pool) {
return (synth(400, "X-Magento-Tags-Pattern or X-Pool header required"));
}
if (req.http.X-Magento-Tags-Pattern) {
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
}
if (req.http.X-Pool) {
ban("obj.http.X-Pool ~ " + req.http.X-Pool);
}
return (synth(200, "Purged"));
}

if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
req.method != "POST" &&
req.method != "TRACE" &&
req.method != "OPTIONS" &&
req.method != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}

# We only deal with GET and HEAD by default
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}

# Bypass shopping cart, checkout and search requests
if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
return (pass);
}

# Bypass health check requests
if (req.url ~ "/pub/health_check.php") {
return (pass);
}

# Set initial grace period usage status
set req.http.grace = "none";

# normalize url in case of leading HTTP scheme and domain
set req.url = regsub(req.url, "^http[s]?://", "");

# collect all cookies
std.collect(req.http.Cookie);

# Compression filter. See https://www.varnish-cache.org/trac/wiki/FAQ/Compression
if (req.http.Accept-Encoding) {
if (req.url ~ ".(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
# No point in compressing these
unset req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
set req.http.Accept-Encoding = "deflate";
} else {
# unkown algorithm
unset req.http.Accept-Encoding;
}
}

# Remove Google gclid parameters to minimize the cache objects
set req.url = regsuball(req.url,"?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
set req.url = regsuball(req.url,"?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

# Static files caching
if (req.url ~ "^/(pub/)?(media|static)/") {
# Static files should not be cached by default
return (pass);

# But if you use a few locales and don't use CDN you can enable caching static files by commenting previous line (#return (pass);) and uncommenting next 3 lines
#unset req.http.Https;
#unset req.http.X-Forwarded-Proto;
#unset req.http.Cookie;
}

return (hash);
}

sub vcl_hash {
if (req.http.cookie ~ "X-Magento-Vary=") {
hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "1"));
}

# For multi site configurations to not cache each other's content
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}

# To make sure http users don't see ssl warning
if (req.http.X-Forwarded-Proto) {
hash_data(req.http.X-Forwarded-Proto);
}

}

sub vcl_backend_response {

set beresp.grace = 3d;

if (beresp.http.content-type ~ "text") {
set beresp.do_esi = true;
}

if (bereq.url ~ ".js$" || beresp.http.content-type ~ "text") {
set beresp.do_gzip = true;
}

if (beresp.http.X-Magento-Debug) {
set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
}

# cache only successfully responses and 404s
if (beresp.status != 200 && beresp.status != 404) {
set beresp.ttl = 0s;
set beresp.uncacheable = true;
return (deliver);
} elsif (beresp.http.Cache-Control ~ "private") {
set beresp.uncacheable = true;
set beresp.ttl = 86400s;
return (deliver);
}

# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
}

# If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass
if (beresp.ttl <= 0s ||
beresp.http.Surrogate-control ~ "no-store" ||
(!beresp.http.Surrogate-Control &&
beresp.http.Cache-Control ~ "no-cache|no-store") ||
beresp.http.Vary == "*") {
# Mark as Hit-For-Pass for the next 2 minutes
set beresp.ttl = 120s;
set beresp.uncacheable = true;
}

return (deliver);
}

sub vcl_deliver {
if (resp.http.X-Magento-Debug) {
if (resp.http.x-varnish ~ " ") {
set resp.http.X-Magento-Cache-Debug = "HIT";
set resp.http.Grace = req.http.grace;
} else {
set resp.http.X-Magento-Cache-Debug = "MISS";
}
} else {
unset resp.http.Age;
}

# Not letting browser to cache non-static files.
if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") {
set resp.http.Pragma = "no-cache";
set resp.http.Expires = "-1";
set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}

unset resp.http.X-Magento-Debug;
unset resp.http.X-Magento-Tags;
unset resp.http.X-Powered-By;
unset resp.http.Server;
unset resp.http.X-Varnish;
unset resp.http.Via;
unset resp.http.Link;
}

sub vcl_hit {
if (obj.ttl >= 0s) {
# Hit within TTL period
return (deliver);
}
if (std.healthy(req.backend_hint)) {
if (obj.ttl + 300s > 0s) {
# Hit after TTL expiration, but within grace period
set req.http.grace = "normal (healthy server)";
return (deliver);
} else {
# Hit after TTL and grace expiration
return (miss);
}
} else {
# server is not healthy, retrieve from cache
set req.http.grace = "unlimited (unhealthy server)";
return (deliver);
}
}








share



























    0
















    • M2 Version : 2.2.2


    • PHP : version : 7.1.26


    • Varnish version : 6.0.2


    • Server : Nginx





    • I have configure varnish in my magento website it working well i have checked in frontend and and passed all test as describe in
      doc.

    • I have setup How Magento cache clearing works with Varnish. but not working let me share my configuration




    env.php



    <?php
    return array (
    'backend' =>
    array (
    'frontName' => 'admin',
    ),
    'crypt' =>
    array (
    'key' => '226p485aa12738648ac1865cadf6304a
    2065c6db0ef584f4804ba9fd703cd112',
    ),
    'db' =>
    array (
    'table_prefix' => '',
    'connection' =>
    array (
    'default' =>
    array (
    'host' => 'localhost',
    'dbname' => 'test',
    'username' => 'test',
    'password' => 'pass',
    'active' => '1',
    'model' => 'mysql4',
    'engine' => 'innodb',
    'initStatements' => 'SET NAMES utf8;',
    ),
    ),
    ),
    'resource' =>
    array (
    'default_setup' =>
    array (
    'connection' => 'default',
    ),
    ),
    'x-frame-options' => 'SAMEORIGIN',
    'MAGE_MODE' => 'developer',
    'session' =>
    array (
    'save' => 'redis',
    'redis' =>
    array (
    'host' => '127.0.0.1',
    'port' => '6379',
    'password' => '',
    'timeout' => '2.5',
    'persistent_identifier' => '',
    'database' => '2',
    'compression_threshold' => '2048',
    'compression_library' => 'gzip',
    'log_level' => '3',
    'max_concurrency' => '6',
    'break_after_frontend' => '5',
    'break_after_adminhtml' => '30',
    'first_lifetime' => '600',
    'bot_first_lifetime' => '60',
    'bot_lifetime' => '7200',
    'disable_locking' => '0',
    'min_lifetime' => '60',
    'max_lifetime' => '2592000',
    ),
    ),
    'cache_types' =>
    array (
    'config' => 1,
    'layout' => 1,
    'block_html' => 1,
    'collections' => 1,
    'reflection' => 1,
    'db_ddl' => 1,
    'eav' => 1,
    'customer_notification' => 1,
    'config_integration' => 1,
    'config_integration_api' => 1,
    'full_page' => 1,
    'translate' => 1,
    'config_webservice' => 1,
    'compiled_config' => 1,
    'cart2quote_license' => 0,
    ),
    'install' =>
    array (
    'date' => 'Tue, 06 Feb 2018 05:18:03 +0000',
    ),
    'system' =>
    array (
    'default' =>
    array (
    'dev' =>
    array (
    'debug' =>
    array (
    'debug_logging' => '0',
    ),
    ),
    ),
    ),
    'cache' =>
    array (
    'frontend' =>
    array (
    'default' =>
    array (
    'backend' => 'Cm_Cache_Backend_Redis',
    'backend_options' =>
    array (
    'server' => '127.0.0.1',
    'port' => '6379',
    'persistent' => '',
    'database' => '0',
    'password' => '',
    'force_standalone' => '0',
    'connect_retries' => '1',
    'read_timeout' => '10',
    'automatic_cleaning_factor' => '0',
    'compress_data' => '1',
    'compress_tags' => '1',
    'compress_threshold' => '20480',
    'compression_lib' => 'gzip',
    'use_lua' => '0',
    ),
    ),
    'page_cache' =>
    array (
    'backend' => 'Cm_Cache_Backend_Redis',
    'backend_options' =>
    array (
    'server' => '127.0.0.1',
    'port' => '6379',
    'persistent' => '',
    'database' => '1',
    'password' => '',
    'force_standalone' => '0',
    'connect_retries' => '1',
    'lifetimelimit' => '57600',
    'compress_data' => '0',
    ),
    ),
    ),
    ),
    'http_cache_hosts' =>
    array (
    0 =>
    array (
    'host' => '127.0.0.1',
    'port' => '8080',
    ),
    ),
    );

    varnish.vcl

    # VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 5
    vcl 4.0;

    import std;
    # The minimal Varnish version is 5.0
    # For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

    backend default {
    .host = "127.0.0.1";
    .port = "8080";
    .first_byte_timeout = 600s;
    .probe = {
    .url = "/health_check.php";
    .timeout = 2s;
    .interval = 5s;
    .window = 10;
    .threshold = 5;
    }
    }

    acl purge {
    "localhost";
    }

    sub vcl_recv {
    if (req.method == "PURGE") {
    if (client.ip !~ purge) {
    return (synth(405, "Method not allowed"));
    }
    # To use the X-Pool header for purging varnish during automated deployments, make sure the X-Pool header
    # has been added to the response in your backend server config. This is used, for example, by the
    # capistrano-magento2 gem for purging old content from varnish during it's deploy routine.
    if (!req.http.X-Magento-Tags-Pattern && !req.http.X-Pool) {
    return (synth(400, "X-Magento-Tags-Pattern or X-Pool header required"));
    }
    if (req.http.X-Magento-Tags-Pattern) {
    ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
    }
    if (req.http.X-Pool) {
    ban("obj.http.X-Pool ~ " + req.http.X-Pool);
    }
    return (synth(200, "Purged"));
    }

    if (req.method != "GET" &&
    req.method != "HEAD" &&
    req.method != "PUT" &&
    req.method != "POST" &&
    req.method != "TRACE" &&
    req.method != "OPTIONS" &&
    req.method != "DELETE") {
    /* Non-RFC2616 or CONNECT which is weird. */
    return (pipe);
    }

    # We only deal with GET and HEAD by default
    if (req.method != "GET" && req.method != "HEAD") {
    return (pass);
    }

    # Bypass shopping cart, checkout and search requests
    if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
    return (pass);
    }

    # Bypass health check requests
    if (req.url ~ "/pub/health_check.php") {
    return (pass);
    }

    # Set initial grace period usage status
    set req.http.grace = "none";

    # normalize url in case of leading HTTP scheme and domain
    set req.url = regsub(req.url, "^http[s]?://", "");

    # collect all cookies
    std.collect(req.http.Cookie);

    # Compression filter. See https://www.varnish-cache.org/trac/wiki/FAQ/Compression
    if (req.http.Accept-Encoding) {
    if (req.url ~ ".(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
    # No point in compressing these
    unset req.http.Accept-Encoding;
    } elsif (req.http.Accept-Encoding ~ "gzip") {
    set req.http.Accept-Encoding = "gzip";
    } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
    set req.http.Accept-Encoding = "deflate";
    } else {
    # unkown algorithm
    unset req.http.Accept-Encoding;
    }
    }

    # Remove Google gclid parameters to minimize the cache objects
    set req.url = regsuball(req.url,"?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
    set req.url = regsuball(req.url,"?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
    set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

    # Static files caching
    if (req.url ~ "^/(pub/)?(media|static)/") {
    # Static files should not be cached by default
    return (pass);

    # But if you use a few locales and don't use CDN you can enable caching static files by commenting previous line (#return (pass);) and uncommenting next 3 lines
    #unset req.http.Https;
    #unset req.http.X-Forwarded-Proto;
    #unset req.http.Cookie;
    }

    return (hash);
    }

    sub vcl_hash {
    if (req.http.cookie ~ "X-Magento-Vary=") {
    hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "1"));
    }

    # For multi site configurations to not cache each other's content
    if (req.http.host) {
    hash_data(req.http.host);
    } else {
    hash_data(server.ip);
    }

    # To make sure http users don't see ssl warning
    if (req.http.X-Forwarded-Proto) {
    hash_data(req.http.X-Forwarded-Proto);
    }

    }

    sub vcl_backend_response {

    set beresp.grace = 3d;

    if (beresp.http.content-type ~ "text") {
    set beresp.do_esi = true;
    }

    if (bereq.url ~ ".js$" || beresp.http.content-type ~ "text") {
    set beresp.do_gzip = true;
    }

    if (beresp.http.X-Magento-Debug) {
    set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
    }

    # cache only successfully responses and 404s
    if (beresp.status != 200 && beresp.status != 404) {
    set beresp.ttl = 0s;
    set beresp.uncacheable = true;
    return (deliver);
    } elsif (beresp.http.Cache-Control ~ "private") {
    set beresp.uncacheable = true;
    set beresp.ttl = 86400s;
    return (deliver);
    }

    # validate if we need to cache it and prevent from setting cookie
    # images, css and js are cacheable by default so we have to remove cookie also
    if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
    unset beresp.http.set-cookie;
    }

    # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass
    if (beresp.ttl <= 0s ||
    beresp.http.Surrogate-control ~ "no-store" ||
    (!beresp.http.Surrogate-Control &&
    beresp.http.Cache-Control ~ "no-cache|no-store") ||
    beresp.http.Vary == "*") {
    # Mark as Hit-For-Pass for the next 2 minutes
    set beresp.ttl = 120s;
    set beresp.uncacheable = true;
    }

    return (deliver);
    }

    sub vcl_deliver {
    if (resp.http.X-Magento-Debug) {
    if (resp.http.x-varnish ~ " ") {
    set resp.http.X-Magento-Cache-Debug = "HIT";
    set resp.http.Grace = req.http.grace;
    } else {
    set resp.http.X-Magento-Cache-Debug = "MISS";
    }
    } else {
    unset resp.http.Age;
    }

    # Not letting browser to cache non-static files.
    if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") {
    set resp.http.Pragma = "no-cache";
    set resp.http.Expires = "-1";
    set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
    }

    unset resp.http.X-Magento-Debug;
    unset resp.http.X-Magento-Tags;
    unset resp.http.X-Powered-By;
    unset resp.http.Server;
    unset resp.http.X-Varnish;
    unset resp.http.Via;
    unset resp.http.Link;
    }

    sub vcl_hit {
    if (obj.ttl >= 0s) {
    # Hit within TTL period
    return (deliver);
    }
    if (std.healthy(req.backend_hint)) {
    if (obj.ttl + 300s > 0s) {
    # Hit after TTL expiration, but within grace period
    set req.http.grace = "normal (healthy server)";
    return (deliver);
    } else {
    # Hit after TTL and grace expiration
    return (miss);
    }
    } else {
    # server is not healthy, retrieve from cache
    set req.http.grace = "unlimited (unhealthy server)";
    return (deliver);
    }
    }








    share

























      0












      0








      0









      • M2 Version : 2.2.2


      • PHP : version : 7.1.26


      • Varnish version : 6.0.2


      • Server : Nginx





      • I have configure varnish in my magento website it working well i have checked in frontend and and passed all test as describe in
        doc.

      • I have setup How Magento cache clearing works with Varnish. but not working let me share my configuration




      env.php



      <?php
      return array (
      'backend' =>
      array (
      'frontName' => 'admin',
      ),
      'crypt' =>
      array (
      'key' => '226p485aa12738648ac1865cadf6304a
      2065c6db0ef584f4804ba9fd703cd112',
      ),
      'db' =>
      array (
      'table_prefix' => '',
      'connection' =>
      array (
      'default' =>
      array (
      'host' => 'localhost',
      'dbname' => 'test',
      'username' => 'test',
      'password' => 'pass',
      'active' => '1',
      'model' => 'mysql4',
      'engine' => 'innodb',
      'initStatements' => 'SET NAMES utf8;',
      ),
      ),
      ),
      'resource' =>
      array (
      'default_setup' =>
      array (
      'connection' => 'default',
      ),
      ),
      'x-frame-options' => 'SAMEORIGIN',
      'MAGE_MODE' => 'developer',
      'session' =>
      array (
      'save' => 'redis',
      'redis' =>
      array (
      'host' => '127.0.0.1',
      'port' => '6379',
      'password' => '',
      'timeout' => '2.5',
      'persistent_identifier' => '',
      'database' => '2',
      'compression_threshold' => '2048',
      'compression_library' => 'gzip',
      'log_level' => '3',
      'max_concurrency' => '6',
      'break_after_frontend' => '5',
      'break_after_adminhtml' => '30',
      'first_lifetime' => '600',
      'bot_first_lifetime' => '60',
      'bot_lifetime' => '7200',
      'disable_locking' => '0',
      'min_lifetime' => '60',
      'max_lifetime' => '2592000',
      ),
      ),
      'cache_types' =>
      array (
      'config' => 1,
      'layout' => 1,
      'block_html' => 1,
      'collections' => 1,
      'reflection' => 1,
      'db_ddl' => 1,
      'eav' => 1,
      'customer_notification' => 1,
      'config_integration' => 1,
      'config_integration_api' => 1,
      'full_page' => 1,
      'translate' => 1,
      'config_webservice' => 1,
      'compiled_config' => 1,
      'cart2quote_license' => 0,
      ),
      'install' =>
      array (
      'date' => 'Tue, 06 Feb 2018 05:18:03 +0000',
      ),
      'system' =>
      array (
      'default' =>
      array (
      'dev' =>
      array (
      'debug' =>
      array (
      'debug_logging' => '0',
      ),
      ),
      ),
      ),
      'cache' =>
      array (
      'frontend' =>
      array (
      'default' =>
      array (
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
      array (
      'server' => '127.0.0.1',
      'port' => '6379',
      'persistent' => '',
      'database' => '0',
      'password' => '',
      'force_standalone' => '0',
      'connect_retries' => '1',
      'read_timeout' => '10',
      'automatic_cleaning_factor' => '0',
      'compress_data' => '1',
      'compress_tags' => '1',
      'compress_threshold' => '20480',
      'compression_lib' => 'gzip',
      'use_lua' => '0',
      ),
      ),
      'page_cache' =>
      array (
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
      array (
      'server' => '127.0.0.1',
      'port' => '6379',
      'persistent' => '',
      'database' => '1',
      'password' => '',
      'force_standalone' => '0',
      'connect_retries' => '1',
      'lifetimelimit' => '57600',
      'compress_data' => '0',
      ),
      ),
      ),
      ),
      'http_cache_hosts' =>
      array (
      0 =>
      array (
      'host' => '127.0.0.1',
      'port' => '8080',
      ),
      ),
      );

      varnish.vcl

      # VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 5
      vcl 4.0;

      import std;
      # The minimal Varnish version is 5.0
      # For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

      backend default {
      .host = "127.0.0.1";
      .port = "8080";
      .first_byte_timeout = 600s;
      .probe = {
      .url = "/health_check.php";
      .timeout = 2s;
      .interval = 5s;
      .window = 10;
      .threshold = 5;
      }
      }

      acl purge {
      "localhost";
      }

      sub vcl_recv {
      if (req.method == "PURGE") {
      if (client.ip !~ purge) {
      return (synth(405, "Method not allowed"));
      }
      # To use the X-Pool header for purging varnish during automated deployments, make sure the X-Pool header
      # has been added to the response in your backend server config. This is used, for example, by the
      # capistrano-magento2 gem for purging old content from varnish during it's deploy routine.
      if (!req.http.X-Magento-Tags-Pattern && !req.http.X-Pool) {
      return (synth(400, "X-Magento-Tags-Pattern or X-Pool header required"));
      }
      if (req.http.X-Magento-Tags-Pattern) {
      ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
      }
      if (req.http.X-Pool) {
      ban("obj.http.X-Pool ~ " + req.http.X-Pool);
      }
      return (synth(200, "Purged"));
      }

      if (req.method != "GET" &&
      req.method != "HEAD" &&
      req.method != "PUT" &&
      req.method != "POST" &&
      req.method != "TRACE" &&
      req.method != "OPTIONS" &&
      req.method != "DELETE") {
      /* Non-RFC2616 or CONNECT which is weird. */
      return (pipe);
      }

      # We only deal with GET and HEAD by default
      if (req.method != "GET" && req.method != "HEAD") {
      return (pass);
      }

      # Bypass shopping cart, checkout and search requests
      if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
      return (pass);
      }

      # Bypass health check requests
      if (req.url ~ "/pub/health_check.php") {
      return (pass);
      }

      # Set initial grace period usage status
      set req.http.grace = "none";

      # normalize url in case of leading HTTP scheme and domain
      set req.url = regsub(req.url, "^http[s]?://", "");

      # collect all cookies
      std.collect(req.http.Cookie);

      # Compression filter. See https://www.varnish-cache.org/trac/wiki/FAQ/Compression
      if (req.http.Accept-Encoding) {
      if (req.url ~ ".(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
      # No point in compressing these
      unset req.http.Accept-Encoding;
      } elsif (req.http.Accept-Encoding ~ "gzip") {
      set req.http.Accept-Encoding = "gzip";
      } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
      set req.http.Accept-Encoding = "deflate";
      } else {
      # unkown algorithm
      unset req.http.Accept-Encoding;
      }
      }

      # Remove Google gclid parameters to minimize the cache objects
      set req.url = regsuball(req.url,"?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
      set req.url = regsuball(req.url,"?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
      set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

      # Static files caching
      if (req.url ~ "^/(pub/)?(media|static)/") {
      # Static files should not be cached by default
      return (pass);

      # But if you use a few locales and don't use CDN you can enable caching static files by commenting previous line (#return (pass);) and uncommenting next 3 lines
      #unset req.http.Https;
      #unset req.http.X-Forwarded-Proto;
      #unset req.http.Cookie;
      }

      return (hash);
      }

      sub vcl_hash {
      if (req.http.cookie ~ "X-Magento-Vary=") {
      hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "1"));
      }

      # For multi site configurations to not cache each other's content
      if (req.http.host) {
      hash_data(req.http.host);
      } else {
      hash_data(server.ip);
      }

      # To make sure http users don't see ssl warning
      if (req.http.X-Forwarded-Proto) {
      hash_data(req.http.X-Forwarded-Proto);
      }

      }

      sub vcl_backend_response {

      set beresp.grace = 3d;

      if (beresp.http.content-type ~ "text") {
      set beresp.do_esi = true;
      }

      if (bereq.url ~ ".js$" || beresp.http.content-type ~ "text") {
      set beresp.do_gzip = true;
      }

      if (beresp.http.X-Magento-Debug) {
      set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
      }

      # cache only successfully responses and 404s
      if (beresp.status != 200 && beresp.status != 404) {
      set beresp.ttl = 0s;
      set beresp.uncacheable = true;
      return (deliver);
      } elsif (beresp.http.Cache-Control ~ "private") {
      set beresp.uncacheable = true;
      set beresp.ttl = 86400s;
      return (deliver);
      }

      # validate if we need to cache it and prevent from setting cookie
      # images, css and js are cacheable by default so we have to remove cookie also
      if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
      unset beresp.http.set-cookie;
      }

      # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass
      if (beresp.ttl <= 0s ||
      beresp.http.Surrogate-control ~ "no-store" ||
      (!beresp.http.Surrogate-Control &&
      beresp.http.Cache-Control ~ "no-cache|no-store") ||
      beresp.http.Vary == "*") {
      # Mark as Hit-For-Pass for the next 2 minutes
      set beresp.ttl = 120s;
      set beresp.uncacheable = true;
      }

      return (deliver);
      }

      sub vcl_deliver {
      if (resp.http.X-Magento-Debug) {
      if (resp.http.x-varnish ~ " ") {
      set resp.http.X-Magento-Cache-Debug = "HIT";
      set resp.http.Grace = req.http.grace;
      } else {
      set resp.http.X-Magento-Cache-Debug = "MISS";
      }
      } else {
      unset resp.http.Age;
      }

      # Not letting browser to cache non-static files.
      if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") {
      set resp.http.Pragma = "no-cache";
      set resp.http.Expires = "-1";
      set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
      }

      unset resp.http.X-Magento-Debug;
      unset resp.http.X-Magento-Tags;
      unset resp.http.X-Powered-By;
      unset resp.http.Server;
      unset resp.http.X-Varnish;
      unset resp.http.Via;
      unset resp.http.Link;
      }

      sub vcl_hit {
      if (obj.ttl >= 0s) {
      # Hit within TTL period
      return (deliver);
      }
      if (std.healthy(req.backend_hint)) {
      if (obj.ttl + 300s > 0s) {
      # Hit after TTL expiration, but within grace period
      set req.http.grace = "normal (healthy server)";
      return (deliver);
      } else {
      # Hit after TTL and grace expiration
      return (miss);
      }
      } else {
      # server is not healthy, retrieve from cache
      set req.http.grace = "unlimited (unhealthy server)";
      return (deliver);
      }
      }








      share















      • M2 Version : 2.2.2


      • PHP : version : 7.1.26


      • Varnish version : 6.0.2


      • Server : Nginx





      • I have configure varnish in my magento website it working well i have checked in frontend and and passed all test as describe in
        doc.

      • I have setup How Magento cache clearing works with Varnish. but not working let me share my configuration




      env.php



      <?php
      return array (
      'backend' =>
      array (
      'frontName' => 'admin',
      ),
      'crypt' =>
      array (
      'key' => '226p485aa12738648ac1865cadf6304a
      2065c6db0ef584f4804ba9fd703cd112',
      ),
      'db' =>
      array (
      'table_prefix' => '',
      'connection' =>
      array (
      'default' =>
      array (
      'host' => 'localhost',
      'dbname' => 'test',
      'username' => 'test',
      'password' => 'pass',
      'active' => '1',
      'model' => 'mysql4',
      'engine' => 'innodb',
      'initStatements' => 'SET NAMES utf8;',
      ),
      ),
      ),
      'resource' =>
      array (
      'default_setup' =>
      array (
      'connection' => 'default',
      ),
      ),
      'x-frame-options' => 'SAMEORIGIN',
      'MAGE_MODE' => 'developer',
      'session' =>
      array (
      'save' => 'redis',
      'redis' =>
      array (
      'host' => '127.0.0.1',
      'port' => '6379',
      'password' => '',
      'timeout' => '2.5',
      'persistent_identifier' => '',
      'database' => '2',
      'compression_threshold' => '2048',
      'compression_library' => 'gzip',
      'log_level' => '3',
      'max_concurrency' => '6',
      'break_after_frontend' => '5',
      'break_after_adminhtml' => '30',
      'first_lifetime' => '600',
      'bot_first_lifetime' => '60',
      'bot_lifetime' => '7200',
      'disable_locking' => '0',
      'min_lifetime' => '60',
      'max_lifetime' => '2592000',
      ),
      ),
      'cache_types' =>
      array (
      'config' => 1,
      'layout' => 1,
      'block_html' => 1,
      'collections' => 1,
      'reflection' => 1,
      'db_ddl' => 1,
      'eav' => 1,
      'customer_notification' => 1,
      'config_integration' => 1,
      'config_integration_api' => 1,
      'full_page' => 1,
      'translate' => 1,
      'config_webservice' => 1,
      'compiled_config' => 1,
      'cart2quote_license' => 0,
      ),
      'install' =>
      array (
      'date' => 'Tue, 06 Feb 2018 05:18:03 +0000',
      ),
      'system' =>
      array (
      'default' =>
      array (
      'dev' =>
      array (
      'debug' =>
      array (
      'debug_logging' => '0',
      ),
      ),
      ),
      ),
      'cache' =>
      array (
      'frontend' =>
      array (
      'default' =>
      array (
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
      array (
      'server' => '127.0.0.1',
      'port' => '6379',
      'persistent' => '',
      'database' => '0',
      'password' => '',
      'force_standalone' => '0',
      'connect_retries' => '1',
      'read_timeout' => '10',
      'automatic_cleaning_factor' => '0',
      'compress_data' => '1',
      'compress_tags' => '1',
      'compress_threshold' => '20480',
      'compression_lib' => 'gzip',
      'use_lua' => '0',
      ),
      ),
      'page_cache' =>
      array (
      'backend' => 'Cm_Cache_Backend_Redis',
      'backend_options' =>
      array (
      'server' => '127.0.0.1',
      'port' => '6379',
      'persistent' => '',
      'database' => '1',
      'password' => '',
      'force_standalone' => '0',
      'connect_retries' => '1',
      'lifetimelimit' => '57600',
      'compress_data' => '0',
      ),
      ),
      ),
      ),
      'http_cache_hosts' =>
      array (
      0 =>
      array (
      'host' => '127.0.0.1',
      'port' => '8080',
      ),
      ),
      );

      varnish.vcl

      # VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 5
      vcl 4.0;

      import std;
      # The minimal Varnish version is 5.0
      # For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

      backend default {
      .host = "127.0.0.1";
      .port = "8080";
      .first_byte_timeout = 600s;
      .probe = {
      .url = "/health_check.php";
      .timeout = 2s;
      .interval = 5s;
      .window = 10;
      .threshold = 5;
      }
      }

      acl purge {
      "localhost";
      }

      sub vcl_recv {
      if (req.method == "PURGE") {
      if (client.ip !~ purge) {
      return (synth(405, "Method not allowed"));
      }
      # To use the X-Pool header for purging varnish during automated deployments, make sure the X-Pool header
      # has been added to the response in your backend server config. This is used, for example, by the
      # capistrano-magento2 gem for purging old content from varnish during it's deploy routine.
      if (!req.http.X-Magento-Tags-Pattern && !req.http.X-Pool) {
      return (synth(400, "X-Magento-Tags-Pattern or X-Pool header required"));
      }
      if (req.http.X-Magento-Tags-Pattern) {
      ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
      }
      if (req.http.X-Pool) {
      ban("obj.http.X-Pool ~ " + req.http.X-Pool);
      }
      return (synth(200, "Purged"));
      }

      if (req.method != "GET" &&
      req.method != "HEAD" &&
      req.method != "PUT" &&
      req.method != "POST" &&
      req.method != "TRACE" &&
      req.method != "OPTIONS" &&
      req.method != "DELETE") {
      /* Non-RFC2616 or CONNECT which is weird. */
      return (pipe);
      }

      # We only deal with GET and HEAD by default
      if (req.method != "GET" && req.method != "HEAD") {
      return (pass);
      }

      # Bypass shopping cart, checkout and search requests
      if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
      return (pass);
      }

      # Bypass health check requests
      if (req.url ~ "/pub/health_check.php") {
      return (pass);
      }

      # Set initial grace period usage status
      set req.http.grace = "none";

      # normalize url in case of leading HTTP scheme and domain
      set req.url = regsub(req.url, "^http[s]?://", "");

      # collect all cookies
      std.collect(req.http.Cookie);

      # Compression filter. See https://www.varnish-cache.org/trac/wiki/FAQ/Compression
      if (req.http.Accept-Encoding) {
      if (req.url ~ ".(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
      # No point in compressing these
      unset req.http.Accept-Encoding;
      } elsif (req.http.Accept-Encoding ~ "gzip") {
      set req.http.Accept-Encoding = "gzip";
      } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
      set req.http.Accept-Encoding = "deflate";
      } else {
      # unkown algorithm
      unset req.http.Accept-Encoding;
      }
      }

      # Remove Google gclid parameters to minimize the cache objects
      set req.url = regsuball(req.url,"?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
      set req.url = regsuball(req.url,"?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
      set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

      # Static files caching
      if (req.url ~ "^/(pub/)?(media|static)/") {
      # Static files should not be cached by default
      return (pass);

      # But if you use a few locales and don't use CDN you can enable caching static files by commenting previous line (#return (pass);) and uncommenting next 3 lines
      #unset req.http.Https;
      #unset req.http.X-Forwarded-Proto;
      #unset req.http.Cookie;
      }

      return (hash);
      }

      sub vcl_hash {
      if (req.http.cookie ~ "X-Magento-Vary=") {
      hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "1"));
      }

      # For multi site configurations to not cache each other's content
      if (req.http.host) {
      hash_data(req.http.host);
      } else {
      hash_data(server.ip);
      }

      # To make sure http users don't see ssl warning
      if (req.http.X-Forwarded-Proto) {
      hash_data(req.http.X-Forwarded-Proto);
      }

      }

      sub vcl_backend_response {

      set beresp.grace = 3d;

      if (beresp.http.content-type ~ "text") {
      set beresp.do_esi = true;
      }

      if (bereq.url ~ ".js$" || beresp.http.content-type ~ "text") {
      set beresp.do_gzip = true;
      }

      if (beresp.http.X-Magento-Debug) {
      set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
      }

      # cache only successfully responses and 404s
      if (beresp.status != 200 && beresp.status != 404) {
      set beresp.ttl = 0s;
      set beresp.uncacheable = true;
      return (deliver);
      } elsif (beresp.http.Cache-Control ~ "private") {
      set beresp.uncacheable = true;
      set beresp.ttl = 86400s;
      return (deliver);
      }

      # validate if we need to cache it and prevent from setting cookie
      # images, css and js are cacheable by default so we have to remove cookie also
      if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
      unset beresp.http.set-cookie;
      }

      # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass
      if (beresp.ttl <= 0s ||
      beresp.http.Surrogate-control ~ "no-store" ||
      (!beresp.http.Surrogate-Control &&
      beresp.http.Cache-Control ~ "no-cache|no-store") ||
      beresp.http.Vary == "*") {
      # Mark as Hit-For-Pass for the next 2 minutes
      set beresp.ttl = 120s;
      set beresp.uncacheable = true;
      }

      return (deliver);
      }

      sub vcl_deliver {
      if (resp.http.X-Magento-Debug) {
      if (resp.http.x-varnish ~ " ") {
      set resp.http.X-Magento-Cache-Debug = "HIT";
      set resp.http.Grace = req.http.grace;
      } else {
      set resp.http.X-Magento-Cache-Debug = "MISS";
      }
      } else {
      unset resp.http.Age;
      }

      # Not letting browser to cache non-static files.
      if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") {
      set resp.http.Pragma = "no-cache";
      set resp.http.Expires = "-1";
      set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
      }

      unset resp.http.X-Magento-Debug;
      unset resp.http.X-Magento-Tags;
      unset resp.http.X-Powered-By;
      unset resp.http.Server;
      unset resp.http.X-Varnish;
      unset resp.http.Via;
      unset resp.http.Link;
      }

      sub vcl_hit {
      if (obj.ttl >= 0s) {
      # Hit within TTL period
      return (deliver);
      }
      if (std.healthy(req.backend_hint)) {
      if (obj.ttl + 300s > 0s) {
      # Hit after TTL expiration, but within grace period
      set req.http.grace = "normal (healthy server)";
      return (deliver);
      } else {
      # Hit after TTL and grace expiration
      return (miss);
      }
      } else {
      # server is not healthy, retrieve from cache
      set req.http.grace = "unlimited (unhealthy server)";
      return (deliver);
      }
      }






      magento2 configuration cache full-page-cache varnish





      share












      share










      share



      share










      asked 1 min ago









      Ketan BoradaKetan Borada

      301737




      301737






















          0






          active

          oldest

          votes











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "479"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f260623%2fvarnish-cache-not-clearing-from-magento-admin%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Magento Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f260623%2fvarnish-cache-not-clearing-from-magento-admin%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          What other Star Trek series did the main TNG cast show up in?

          Berlina muro

          Berlina aerponto