Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Varnish

 Varnish

Varnish techtalk november 2013

Avatar for Bernard Grymonpon

Bernard Grymonpon

November 05, 2013
Tweet

More Decks by Bernard Grymonpon

Other Decks in Technology

Transcript

  1. Caching Client Server Req A Resp A Client Req A

    Resp A V a r n i s h Req A Resp A Friday 17 January 14
  2. GET /nl HTTP/1.1 Host: www.openminds.be Connection: keep-alive Accept: text/html,applic...age/webp,*/*;q=0.8 User-Agent:

    Mozil...ari/537.36 Referer: http://www.openminds.be/nl Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: ag9...mcmd=email Friday 17 January 14
  3. GET /nl HTTP/1.1 Host: www.openminds.be Connection: keep-alive Accept: text/html,applic...age/webp,*/*;q=0.8 User-Agent:

    Mozil...ari/537.36 Referer: http://www.openminds.be/nl Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: ag9...mcmd=email Friday 17 January 14
  4. HTTP/1.1 200 OK Server: nginx/1.2.7 Content-Type: text/html;charset=utf-8 X-Powered-By: PHP/5.4.12-1~dotdeb.1 Pragma:

    no-cache Content-Encoding: gzip Set-Cookie: frontend_language=s:2:"nl";; expires=Fri, 01-Apr-2016 07:00:00 GMT; path=/; domain=.openminds.be X-step: nl cache-control: max-age = 600 Content-Length: 6155 Date: Tue, 05 Nov 2013 07:29:17 GMT Vary: Accept-Language Connection: close Friday 17 January 14
  5. HTTP/1.1 200 OK Server: nginx/1.2.7 Content-Type: text/html;charset=utf-8 X-Powered-By: PHP/5.4.12-1~dotdeb.1 Pragma:

    no-cache Content-Encoding: gzip Set-Cookie: frontend_...n=.openminds.be X-step: nl cache-control: max-age = 600 Content-Length: 6155 Date: Tue, 05 Nov 2013 07:29:17 GMT Vary: Accept-Language Connection: close Friday 17 January 14
  6. HTTP/1.1 200 OK Server: nginx/1.2.7 Content-Type: text/html;charset=utf-8 X-Powered-By: PHP/5.4.12-1~dotdeb.1 Pragma:

    no-cache Content-Encoding: gzip Set-Cookie: frontend_...n=.openminds.be X-step: nl cache-control: max-age = 600 Content-Length: 6155 Date: Tue, 05 Nov 2013 07:29:17 GMT Vary: Accept-Language Connection: close Friday 17 January 14
  7. Wanneer cachen? • Gelijke requests • Server geeft aan dat

    er gecached mag worden Friday 17 January 14
  8. TTL you say? • Time to live • Default: 120

    seconden • Override door Cache-control of Expires Friday 17 January 14
  9. Cache-control • Max-age & S-maxage (in seconden) • Public &

    Private • No-cache / No-store • Must-revalidate / Proxy-revalidate Friday 17 January 14
  10. Expires • Ondergeschikt aan cache-control • Geeft aan wanneer het

    object niet meer geldig is Expires:Thu, 14 Nov 2013 16:06:33 GMT Friday 17 January 14
  11. Age • Leeftijd van de content • Cache-laag kan dit

    meegeven • Echte levensduur: max-age min age (of s-maxage - age) Friday 17 January 14
  12. Vary • Response (server -> client) • Geeft aan waarin

    de pagina kan verschillen • Hint voor cache-laag • Vary: Cookie, Accept-Encoding Friday 17 January 14
  13. Vary • Vary: * -> niet cachebaar • Geen Cookie=language

    • Slechte header - logica moet meestal in VCL Friday 17 January 14
  14. Config • Frontend (web & control) • Backend(s) (meerdere mogelijk)

    • Settings (threads,... parameters) • Logica (VCL - C-achtig) Friday 17 January 14
  15. Wanneer cacht varnish? • GET en HEAD, geen auth en

    geen cookies, • Hashing op basis van IP/host + url • Vary * en Set-Cookie zijn ook a nappers Friday 17 January 14
  16. Control channel • varnishadm • Socket, poort 6082 • ban.list,

    ban.url, ban.req ... • plugins/gems/modules/... Friday 17 January 14
  17. ban ban req.url ~ "/foo" ban req.http.host ~ "example.com" &&

    obj.http.content-type ~ "text" Friday 17 January 14
  18. Specifieke ban • Hashing aanpassen -> meer om op te

    bannen • Ban lurker Friday 17 January 14
  19. Ban lurker • Geen toegang tot req (req.host en req.url)

    • Enkel toegang tot obj set beresp.http.x-url = req.url; set beresp.http.x-host = req.http.host; ban obj.http.x-url ~ /something/ Friday 17 January 14
  20. Cookies • Session cookies (SESS=...) • Specifieke cookies (language=...) •

    Client-side cookies (has_js, _utmc...) Friday 17 January 14
  21. Client-side cookies • Enkel nuttig bij de client • Kunnen

    genegeerd worden • has_js, _umtc, ... Friday 17 January 14
  22. Session cookies • Niet cachebaar • Inhoud op server •

    Heb je die echt nodig? Friday 17 January 14
  23. Specifieke Cookies • Specifieke cookies • Geeft variatie aan (taal

    bvb) • Prima bruikbaar Friday 17 January 14
  24. Edge Side Includes • Niet elk deel van de pagina

    even lang cachen • Een deel niet cachen Main Overview List Cart Friday 17 January 14
  25. Edge Side Includes • Niet elk deel van de pagina

    even lang cachen • Een deel niet cachen 1 uur 5 min 30 sec 0 sec Friday 17 January 14
  26. sub vcl_recv { set req.http.Surrogate-Capability="key=ESI/1.0"; } sub vcl_fetch { if

    (beresp.http.Surrogate-Control ~ "ESI/1.0") { set beresp.do_esi = true; } } Friday 17 January 14
  27. Voorbeeld • <esi:include src=”/cart/content” /> • GET /cart/content -> server

    • Wat terugkeert komt in de pagina Friday 17 January 14
  28. Caching • Veel aangepaste data? (Nieuwssite) • Ingelogde gebruikers? (Community)

    • Form submits? (Wedstrijden) • Verschillende pagina’s per visitor? (Mobile vs Desktop vs Tablet) Friday 17 January 14
  29. Ideale wereld: site • 1 uur cache? eindeloze cache? •

    Browser cache niet nodig • Bij admin aktie: ban • Geen ingelogde gebruikers • Talen/... via cookie Friday 17 January 14
  30. IW: Nieuwssite • Eindeloze cache • Browser-cache • Bans bij

    updates • Client-side cookies voor “favorieten” • ESI voor inlog? Friday 17 January 14
  31. Community • Login/Welcome-blok in ESI • Javascript update rest van

    pagina • Cache op user-objecten • Partial caching op content-items Friday 17 January 14
  32. Webshop • Catalogus items gecached • ESI of Ajax voor

    opbouw (endless scroll?) • Winkelmandje in client-cache • Pas bij checkout: sessie • Laatst bekeken: client-side Friday 17 January 14