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

Varnish

 Varnish

Varnish techtalk november 2013

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