Combined PR's into optimized VCL file: 1. https://github.com/magento/magento2/pull/29360 2. https://github.com/magento/magento2/pull/28944 3. https://github.com/magento/magento2/pull/28894 4. https://github.com/magento/magento2/pull/35228 5. https://github.com/magento/magento2/pull/36524 6. https://github.com/magento/magento2/pull/34323 @package magento/module-page-cache @version 100.4.5 @level 0 diff --git etc/varnish6.vcl etc/varnish6.vcl index 16dd950..468330c 100644 --- etc/varnish6.vcl +++ etc/varnish6.vcl @@ -10,7 +10,7 @@ backend default { .port = "/* {{ port }} */"; .first_byte_timeout = 600s; .probe = { - .url = "/pub/health_check.php"; + .url = "/health_check.php"; .timeout = 2s; .interval = 5s; .window = 10; @@ -81,24 +81,9 @@ sub vcl_recv { # 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 { - # unknown algorithm - unset req.http.Accept-Encoding; - } - } - # Remove all marketing get parameters to minimize the cache objects - if (req.url ~ "(\?|&)(gclid|cx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=") { - set req.url = regsuball(req.url, "(gclid|cx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=[-_A-z0-9+()%.]+&?", ""); + if (req.url ~ "(\?|&)(gclid|cx|_kx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=") { + set req.url = regsuball(req.url, "(gclid|cx|_kx|ie|cof|siteurl|zanpid|origin|fbclid|mc_[a-z]+|utm_[a-z]+|_bta_[a-z]+)=[-_A-z0-9+()%.]+&?", ""); set req.url = regsub(req.url, "[?|&]+$", ""); } @@ -127,9 +112,8 @@ sub vcl_hash { } # To make sure http users don't see ssl warning - if (req.http./* {{ ssl_offloaded_header }} */) { - hash_data(req.http./* {{ ssl_offloaded_header }} */); - } + hash_data(req.http./* {{ ssl_offloaded_header }} */); + /* {{ design_exceptions_code }} */ if (req.url ~ "/graphql") { @@ -147,13 +131,9 @@ sub process_graphql_headers { } } - if (req.http.Store) { - hash_data(req.http.Store); - } + hash_data(req.http.Store); - if (req.http.Content-Currency) { - hash_data(req.http.Content-Currency); - } + hash_data(req.http.Content-Currency); } sub vcl_backend_response { @@ -173,9 +153,7 @@ sub vcl_backend_response { } # cache only successfully responses and 404s that are not marked as private - if (beresp.status != 200 && - beresp.status != 404 && - beresp.http.Cache-Control ~ "private") { + if ((beresp.status != 200 && beresp.status != 404) || beresp.http.Cache-Control ~ "private") { set beresp.uncacheable = true; set beresp.ttl = 86400s; return (deliver); @@ -186,28 +164,18 @@ sub vcl_backend_response { 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; - } - - # If the cache key in the Magento response doesn't match the one that was sent in the request, don't cache under the request's key - if (bereq.url ~ "/graphql" && bereq.http.X-Magento-Cache-Id && bereq.http.X-Magento-Cache-Id != beresp.http.X-Magento-Cache-Id) { - set beresp.ttl = 0s; - set beresp.uncacheable = true; - } - - return (deliver); + # If the cache key in the Magento response doesn't match the one that was sent in the request, don't cache under the request's key + if (bereq.url ~ "/graphql" && bereq.http.X-Magento-Cache-Id && bereq.http.X-Magento-Cache-Id != beresp.http.X-Magento-Cache-Id) { + set beresp.ttl = 120s; + set beresp.uncacheable = true; + return (deliver); + } } sub vcl_deliver { - if (resp.http.x-varnish ~ " ") { + if (obj.uncacheable) { + set resp.http.X-Magento-Cache-Debug = "UNCACHEABLE"; + } else if (obj.hits) { set resp.http.X-Magento-Cache-Debug = "HIT"; set resp.http.Grace = req.http.grace; } else { sub vcl_deliver { - if (resp.http.x-varnish ~ " ") { + if (obj.uncacheable) { + set resp.http.X-Magento-Cache-Debug = "UNCACHEABLE"; + } else if (obj.hits) { set resp.http.X-Magento-Cache-Debug = "HIT"; set resp.http.Grace = req.http.grace; } else {