Your SlideShare is downloading. ×
0
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Sácale el jugo a Varnish
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Sácale el jugo a Varnish

331

Published on

Ideas, plugins y trucos para sacarle un mayor partido a Varnish con o sin drupal.

Ideas, plugins y trucos para sacarle un mayor partido a Varnish con o sin drupal.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
331
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Sácale jugo a Varnish
  • 2. ¿Quién soy? Responsable técnico de idealista/news @rodricels Curioso sin remedio
  • 3. VARNISH
  • 4. cURL cURL + vmod https://github.com/varnish/libvmod-curl
  • 5. cURL • Petición curl.get(url) curl.post(url, data) curl.header_add() curl.header_remove() curl.set_connect_timeout() curl.set_timeout() • Devolución curl.header("foo") curl.status() curl.body() curl.error()
  • 6. cURL: Calentar caché tras banear if (req.request == "BAN" && client.ip ~ purge_ban) { ban("obj.http.x-host == " + req.http.host + "&& obj.http.x-url == " + req.url); // ¡¡¡ AQUÍ VA LA MAGIA !!! curl.get(req.http.host + req.url); error 200 "Ban added"; } Spoiler: se puede hacer sin cURL
  • 7. cURL: autentificación curl.fetch("http://authserver/validate?key=" + regsub(req.url, ".*key=([a-z0-9]+), "1")); if (curl.status() != 200) { error 403 "Go away"; } http://err.no/personal/blog/2011/Aug/03
  • 8. cURL: actualizar contenido relacionado if (req.url ~ foo && obj.hits > 10000) { curl.get(req.http.host + bar); }
  • 9. Calentar caché Otras formas • Varnishreplay –r log.txt • Curl/wget sitemap.xml #!/bin/bash URL='www.example.com' wget --quiet http://$URL/sitemap.xml --no-cache --no-cookies --output-document - | egrep -o "http://$URL/foo/bar" | while read line; do curl --user-agent 'Cache Warmer' --silent --location --max-time 10 $line > /dev/null 2>&1 sleep 5 done
  • 10. Calentar caché • Purge + Restart sub vcl_hit { # y vcl_miss() if (req.request == "PURGE") { purge; set req.request = "GET"; set req.http.X-purger = "Purged"; error 800 "restart"; # set req-backend = SuperServer; # return(restart); } } https://www.varnish-software.com/static/book/Saving_a_request.html#solution-combinepurge-and-restart
  • 11. Detección de dispositivos OpenDDR + dClass Open Device Description Repository Dtree Pattern Classification Engine https://www.varnish-cache.org/vmod/dclass-apache-devicemap https://github.com/OpenDDRdotORG/OpenDDR-Resources
  • 12. Detección de dispositivos set req.http.dclass_openddr = dclass.classify(req.http.user-agent); if (dclass.get_field("is_tablet") == "true"){ set req.http.dclass_type = "tablet"; } else if ( dclass.get_field("is_wireless_device") == "true" && dclass.get_field("inputDevices") == "touchscreen"){ set req.http.dclass_type = "smartphone"; }
  • 13. Detección de dispositivos sub vcl_recv() { if (req.http.Cookie ~ "^X-device=") { # do the magic } } sub vcl_fetch() { set obj.http.Set-Cookie = "X-device=" + req.http.dclass_type; domain=.example.com; path=/"; }
  • 14. Detección de dispositivos Fabricante Modelo Ancho y alto de pantalla Inputs (táctil, teclado, etc) Soporte de Javascript Si es wireless / tablet / crawler / desktop Navegador, nombre y versión Sistema operativo
  • 15. Geo IP Fijar conexión a servidores locales Estúpida ley de cookies europea Restricciones copyright por países Tres implementaciones La de Cosimo (Opera) permite nivel de ciudad https://github.com/leed25d/geoip-vmod https://github.com/lampeh/libvmod-geoip https://github.com/cosimo/varnish-geoip
  • 16. Firewall varnish Usa otros vmods ParseReq Shield Throttle UrlEncode Basado en mod_security Backend-less: mejor no mezclar con la lógica de caché https://github.com/comotion/VSF
  • 17. Firewall varnish • • • • • • Mitigación de DDoS Ataques SQL XSS URL malformadas Robots y arañas Vulnerabilidades https://github.com/comotion/VSF
  • 18. Firewall varnish • Toma de decisiones • Solo log • Bloquear • Devolver html • Honey-trap • Redirect / image
  • 19. Firewall varnish Te va a parar unos cuantos balones… pero no es Lev Yashin
  • 20. Autentificación ldap htpassw vcl *(y con cURL) https://www.varnish-cache.org/vmod/ldap-authentication https://github.com/pariahsoft/libvmod-authentication https://www.varnish-cache.org/vmod/basicauth
  • 21. Autentificación con ldap import ldap; if(req.url ~ "^/member/"){ if(!(req.http.Authorization && ldap.simple_auth( true, "cn=Manager,dc=ldap,dc=example,dc=com", "password", "ldap://192.168.1.1/ou=people,dc=ldap, dc=example,dc=com?uid?sub?(objectClass=*)", ldap.get_basicuser(), ldap.get_basicpass() ))){ error 401; }
  • 22. Autentificación con htpassw Fichero con estructura htpassw usando md5 o sha1 (no es necesario apache) import basicauth; sub vcl_recv { if (!basicauth.match("/var/www/.htpasswd", req.http.Authorization)) { error 401 "Authentication required"; } }
  • 23. Autentificación harcoded en vcl if(req.url ~ "^/protected/") { if(!authentication.match("admin", "test")) { error 401 "Authentication Required"; } }
  • 24. Ordenar parámetros /video/480?title=0&byline=0&portrait=0&color=51a516 /video/480?byline=0&color=51a516&portrait=0&title=0 import boltsort; sub vcl_hash { set req.url = boltsort.sort(req.url); } Aumenta el ratio de hit Disminuye el uso de memoria https://www.varnish-cache.org/vmod/boltsort-querystring-params-sort https://github.com/Dridi/libvmod-querystring
  • 25. Reducir I/O de disco “Si usas la RAM como almacén, todo Varnish funciona en memoria” SHM ¡NO!
  • 26. Reducir I/O de disco Shared Memory Log en /var/lib/varnish Junto con los .so de los vcls que hayas cargado ~ 80 MB /etc/fstab tmpfs /var/lib/varnish tmpfs rw,size=128M 0 0 Si tienes SSDs no hace falta https://www.varnish-software.com/static/book/Tuning.html#the-shared-memory-log
  • 27. TTL personalizada set beresp.ttl = 10m; if (beresp.http.X-TTL) { C{ char *ttl; ttl = VRT_GetHdr(sp, HDR_BERESP, "06X-TTL:"); VRT_l_beresp_ttl(sp, atoi(ttl)); }C } http://www.slideshare.net/MaximeTopolov/varnish-14329696
  • 28. Proxys y Akamai Varnish 3 no transforma string en IP ipcast.clientip(req.http.X-Forwarded-For); ipcast.clientip(req.http.True-Client-IP); ipcast.clientip("192.168.0.10"); ipcast.clientip("2001:db8::1"); https://github.com/lkarsten/libvmod-ipcast
  • 29. Imágenes No las cachees.
  • 30. Imágenes
  • 31. Imágenes Si tienes CDN ¿para qué cacheas los estáticos? Si no tienes CDN ¿para qué cacheas los estáticos? Apache 2.4 puede ser suficiente OMFG!!!11one!! Ban.nuke crece sin cesar
  • 32. Longtail • • • • • Separar storages Diferentes TTLs TTLs por horas TTLs por tipos de ficheros TTLs por edad del contenido
  • 33. Longtail sub vcl_fetch() { if (req.url ~ "^/archivo/20(0[1-9]|1[0-2])" && beresp.ttl > 0s ) { unset beresp.http.expires; set beresp.http.cache-control = "max-age=604800"; set beresp.ttl = 2w; // varnish ttl set beresp.storage = "disco"; } else { set beresp.storage = "memoria"; } } https://www.varnish-cache.org/trac/wiki/VCLExampleLongerCaching
  • 34. Sitio en mantenimiento Poner el sitio en mantenimiento puede ser una locura, avisa a Varnish de ello. Dos acercamientos: • Devolver todo lo que aún en caché y dar mensaje en lo que no esté en caché. • Dar un mensaje de mantenimiento
  • 35. Varnish Bans Manager Varnish Administration Console Gestor de bans libre Hecho en A Coruña por dot2code https://github.com/dot2code/varnish-bans-manager
  • 36. Varnish Bans Manager Web-manager en django/*SQL con ACLs https://github.com/dot2code/varnish-bans-manager
  • 37. Varnish Bans Manager Monitorización de bans actuales y pasados
  • 38. Varnish Bans Manager Ban por nodo/grupo con expresiones regulares
  • 39. Varnish Bans Manager Monitorización de bans actuales y pasados
  • 40. Memcached y Redis Lectura y escritura en Memcached Lectura y escritura en Redis (soporte completo) https://www.varnish-cache.org/vmod/memcached https://github.com/zephirworks/libvmod-redis
  • 41. Memcached y redis Estadísticas if (memcached.incr("node-1234", 1)) { // set(STRING key, STRING value, INT expiration, INT flags) memcached.set("node-1234", "1", 0, 0); } Recoger bloques set resp.http.block-123 = memcached.get("block-123");
  • 42. ¿Preguntas?

×