Proxy-Pass zum Varnish erreicht den Cache nicht

Proxy-Pass zum Varnish erreicht den Cache nicht

Auf meinem Webserver habe ich eine Varnish-Instanz, die ich gerne als Cache für eine von einem Drittanbieter gehostete Website (unter blog.company.com/blog) nutzen würde. Ich habe hierfür einen Proxypass, da der Rest der Website lokal gehostet wird und ich möchte, dass der Browser dies so maskiert, dass es aussieht, als wäre es Teil unserer Website (company.com/blog).

(/etc/httpd/conf.d/proxy.conf) ProxyTimeout 300

# Blog
ProxyPass /blog http://localhost:8000
ProxyPassReverse /blog http://localhost:8000

Und ich habe das Varnish-Backend auf blog.sugarsync.com gerichtet:

backend default {
  .host = "70.40.204.127";
  .port = "80";
}

Die Seite wird aufgelöst, aber im Wesentlichen wird die Seite zu blog.company.com/blog umgeleitet und erreicht nie den Cache. Varnishlog zeigt eine „Pass“-Funktion an, wenn es die GET-Anforderung empfängt, was bedeutet, dass dies nicht der Fall ist, was seltsam ist, da ich alle Standardverhalten in /etc/varnish/default.vcl außerhalb des benutzerdefinierten Backends verwende und sie daher nicht weitergeben sollte.

   11 SessionOpen  c 127.0.0.1 46485 0.0.0.0:8000
   11 ReqStart     c 127.0.0.1 46485 394102336
   11 RxRequest    c GET
   11 RxURL        c /
   11 RxProtocol   c HTTP/1.1
   11 RxHeader     c Host: localhost:8000
   11 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
   11 RxHeader     c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   11 RxHeader     c Accept-Encoding: gzip,deflate,sdch
   11 RxHeader     c Accept-Language: en-US,en;q=0.8
   11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
   11 RxHeader     c Cookie: __utmx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351630608:15552000; __utmx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351791703:155
   11 RxHeader     c scns-hdr-ip: 50.76.54.11
   11 RxHeader     c X-Forwarded-For: 10.5.112.22
   11 RxHeader     c X-Forwarded-Host: www.s.company.com
   11 RxHeader     c X-Forwarded-Server: www.company.com
   11 RxHeader     c Connection: Keep-Alive
   11 VCL_call     c recv
   11 VCL_return   c pass
   11 VCL_call     c pass
   11 VCL_return   c pass

Seltsam ist, dass, wenn ich den Hostnamen direkt eingebe (hostname.company.com:8000 oder company.com/blog), der Varnish-Cache richtig erreicht wird, die URL aber trotzdem im Browser umgeleitet wird. Auch das Weiterleiten zur richtigen URL (www.company.com/blog) erreicht den Cache. Subdomains scheinen ebenfalls nicht zu funktionieren … was ist hier los?

Antwort1

Dies passliegt daran, dass die Standard-VCL-Logik sich weigert, alles zwischenzuspeichern, das ein „ Authorizationoder“ Cookiein den Anforderungsheadern enthält, Ihre Anforderung jedoch ein „“ enthält Cookie.

if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}

Dieses Standardverhalten ist eine übertriebene Vorsichtsmaßnahme, damit Server, auf denen je nach Benutzersitzung anderer Inhalt für eine Seite zurückgegeben wird, dieses Verhalten in Ihrem ändern können vcl_recv. Implementieren Sie Ihr Verhalten als Kopie des Standardverhaltens, entfernen Sie jedoch die req.http.CookiePrüfung:

if (req.http.Authorization) {
    /* Not cacheable by default */
    return (pass);
}

Was das Umleitungsverhalten angeht, klingt es so, als würde eine 30xAntwort eingehen, die den Client-Browser umleitet. Können Sie die Protokolle für einen dieser Treffer bereitstellen?

verwandte Informationen