2016-09-29 3 views
0

Ich habe Lack über Docker auf meinem Symfony-Build eingerichtet, kann aber nicht das Caching richtig funktionieren lassen. Das Alter scheint bei 0 zu bleiben, egal was ich versuche.Varnish/Symfony3 Cache auf Nginx - Ago 0 auf Caching

Vom Lesen über es möglicherweise zu tun mit Cookies gesetzt werden oder möglicherweise Köpfe verfällt, aber ich kann nicht für das Leben von mir erarbeiten, was passiert.

Response-Header sind:

Age:0 
Cache-Control:max-age=64000, public, s-maxage=64000 
Connection:keep-alive 
Content-Type:text/html; charset=UTF-8 
Date:Thu, 29 Sep 2016 20:21:43 GMT 
ETag:"cb3ed8f6672c4be1148c4f7d12c20789" 
Server:nginx 
Set-Cookie:device_view=full; expires=Sat, 29-Oct-2016 20:21:43 GMT; Max-Age=2592000; path=/; HttpOnly 
Transfer-Encoding:chunked 
Vary:Accept-Encoding, Accept-Language 
Via:1.1 varnish-v4 
X-Cache-Debug:1 
X-Cache-Debug:1 
X-Debug-Token:503eda 
X-Debug-Token-Link:http://192.168.99.100/app_dev.php/_profiler/503eda 
X-Powered-By:PHP/7.0.11 
X-Varnish:65542 

Anfrage Header sind:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:no-cache 
Connection:keep-alive 
Cookie:customcookie=1; _gat=1; PHPSESSID=1fd8cd59c8d8d0185310ec0cdb06fce7; _ga=GA1.1.706323429.1474891952; hl=en; device_view=full 
Host:192.168.99.100 
Pragma:no-cache 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 

Aktuelle VCL-Datei:

vcl 4.0; 

backend default { 
    .host = "192.168.99.100"; 
    .port = "8080"; 
} 

sub vcl_recv { 
    unset req.http.Forwarded; 

    if (req.http.X-Forwarded-Proto == "https") { 
     set req.http.X-Forwarded-Port = "443"; 
    } else { 
     set req.http.X-Forwarded-Port = "80"; 
    } 

    // Remove all cookies except the session ID. 
    if (req.http.Cookie) { 
     set req.http.Cookie = ";" + req.http.Cookie; 
     set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); 
     set req.http.Cookie = regsuball(req.http.Cookie, ";(PHPSESSID)=", "; \1="); 
     set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); 
     set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); 

     if (req.http.Cookie == "") { 
      // If there are no more cookies, remove the header to get page cached. 
      unset req.http.Cookie; 
     } 
    } 
} 

an die unten Ändern keine Wirkung hat:

sub vcl_recv { 
    unset req.http.Forwarded; 
    unset req.http.Cookie; 
} 

Ich vermute, es wird etwas einfaches sein, aber das kann nicht funktionieren. Irgendwelche Hilfe geschätzt

+0

Können Sie die Antwortheader von Ihrem Nginx hinzufügen, wenn Sie es direkt anfordern (ohne Lack)? Außerdem verwenden Sie in Ihrer Anfrage den Header 'Pragma: no-cache', den Sie entfernen sollten. –

Antwort

0

Varnish speichert keine Seite, die Cookies setzt und in den Antwortheadern, die Sie zur Verfügung stellten, ist dort ein Set-Cookie dort.

dieses Problem zu adressieren Sie zwei Pfaden folgen:

  • zu vermeiden Caching Weiter diese Seiten mit Set-Cookie;
  • Alle entfernen Set-Cookie von den Seiten, die Sie gecached werden sollen;
  • Oder legen Sie alle Manipulation getrennt von der Seite, die Sie zwischenspeichern möchten und rufen Sie AJAX.