
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 pass
liegt daran, dass die Standard-VCL-Logik sich weigert, alles zwischenzuspeichern, das ein „ Authorization
oder“ Cookie
in 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.Cookie
Prüfung:
if (req.http.Authorization) {
/* Not cacheable by default */
return (pass);
}
Was das Umleitungsverhalten angeht, klingt es so, als würde eine 30x
Antwort eingehen, die den Client-Browser umleitet. Können Sie die Protokolle für einen dieser Treffer bereitstellen?