Ich habe einen Server mit NGINX / Varnish 4 & Magento 2.1. Ich habe alles, was für Lack und Magento 2.1 benötigt wird, in Stores> Configuration> Admin eingerichtet . Lack funktioniert.
Mein Problem ist, dass der Cache nicht gelöscht wird, wenn ich versuche, den Magento-Cache zu leeren. Der Lackcache wird erst nach einem Neustart über ssh gelöscht. In Magento-Entwicklerdokumenten habe ich irgendwo festgestellt, dass alles funktioniert, wenn / var / cache / leer ist. In meinem Fall ist der Cache-Ordner nicht leer. Ich habe versucht, ihn zu löschen, aber er kommt zurück.
Meine Server-IP wurde durch "server.ip" ersetzt.
env.php
'http_cache_hosts' => array(
array (
'host' => 'server.ip',
'port' => '6082',
)
),
default.vcl
vcl 4.0;
import std;
# The minimal Varnish version is 4.0
# For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'
backend default {
.host = "server.ip";
.port = "8080";
}
acl purge {
"server.ip";
}
sub vcl_recv {
if (req.method == "PURGE") {
if (client.ip !~ purge) {
return (synth(405, "Method not allowed"));
}
if (!req.http.X-Magento-Tags-Pattern) {
return (synth(400, "X-Magento-Tags-Pattern header required"));
}
ban("obj.http.X-Magento-Tags ~ " + req.http.X-Magento-Tags-Pattern);
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);
}
# 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 are always cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
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 {
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;
}
# 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);
}
if (beresp.http.X-Magento-Debug) {
set beresp.http.X-Magento-Cache-Control = beresp.http.Cache-Control;
}
# 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 (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
set beresp.grace = 1m;
}
}
# 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.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";
} else {
set resp.http.X-Magento-Cache-Debug = "MISS";
}
} else {
unset resp.http.Age;
}
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;
}
curl -I -v --Location-Trusted http: //server.ip/
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Sun, 19 Mar 2017 19:01:06 GMT
Date: Sun, 19 Mar 2017 19:01:06 GMT
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Keep-Alive: timeout=60
Keep-Alive: timeout=60
< X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
X-Frame-Options: SAMEORIGIN
< X-Magento-Cache-Control: max-age=86400, public, s-maxage=86400
X-Magento-Cache-Control: max-age=86400, public, s-maxage=86400
< Pragma: no-cache
Pragma: no-cache
< Expires: -1
Expires: -1
< Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
< Age: 578
Age: 578
< X-Magento-Cache-Debug: HIT
X-Magento-Cache-Debug: HIT
< Connection: keep-alive
Connection: keep-alive
locken -X SPÜLEN
<!DOCTYPE html>
<html>
<head>
<title>400 X-Magento-Tags-Pattern header required</title>
</head>
<body>
<h1>Error 400 X-Magento-Tags-Pattern header required</h1>
<p>X-Magento-Tags-Pattern header required</p>
<h3>Guru Meditation:</h3>
<p>XID: 65764</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
quelle
Hinzufügen von etwas wirklich Wichtigem zu George Georges Antwort :
Ausführen :
bin/magento config:set system/full_page_cache/caching_application 2
(Andernfalls wird die Bereinigungsanforderung nicht gesendet!)Dann:
bin/magento setup:config:set --http-cache-hosts=127.0.0.1:6081
Ändern Sie
default.vcl
dann Folgendes:quelle
Sehen Sie, welcher Port tatsächlich vom Lackdienst verwendet wird. Ich denke, Ihre Einstellungen zum Lackschnittstellenport sind falsch.
Varnish führt standardmäßig admin unter 127.0.0.1:6082 aus, sodass Sie offensichtlich Cache-Bereinigungsanforderungen an keinen Ort senden ...
Überprüfen
varnish.params
Sie, ob Sie diese sehen:Sie müssen die Cache-Bereinigung an den Ort senden, an
127.0.0.1:80
dem Ihr Lack zuhört.quelle
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7352/varnishd tcp 0 0 server.ip:6082 0.0.0.0:* LISTEN 7351/varnishd tcp6 0 0 :::80 :::* LISTEN 7352/varnishd
Wenn Sie sich auf einem
80
Entwicklungscomputer befinden, versuchen Sie es mit dem Port in env.phpquelle
env.php
dem Port, der zum Senden von Säuberungen an Varnish verwendet wird, ist festgelegt. Ich habe ihn gebeten, es mit Port zu versuchen80
.var/cache
hat nichts mit dem Ganzseiten-Cache-Typ zu tun.var/cache
ist leer, wenn wir das Speichern im Dateisystem durch Redis ersetzen. Ther ist auchvar/page_cache
. Über das Problem, dass Varnish nicht gelöscht wird, muss es sich um ein Problem mit der Serverkonfiguration handeln.Zusätzlich zur direkten Bearbeitung der
env.php
Referenz der akzeptierten Antwort können Sie auch den folgenden Befehl verwenden, der einfacher ist :Das Parameterformat muss sein
<hostname or ip>:<listen port>
, wobei Sie weglassen können,<listen port>
ob es sich um Port 80 handelt.Sie können dann Varnish-Hosts löschen, wenn Sie den Magento-Cache (auch als Bereinigen des Caches bezeichnet) im Magento-Administrator oder über die Befehlszeile aktualisieren.
Weitere Informationen finden Sie in der offiziellen Anleitung Konfigurieren von Magento zum Entfernen von Lack
quelle