SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
Sácale jugo a Varnish
¿Quién soy?
Responsable técnico de
idealista/news
@rodricels
Curioso sin remedio
VARNISH
cURL

cURL
+
vmod
https://github.com/varnish/libvmod-curl
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()
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
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
cURL: actualizar contenido relacionado
if (req.url ~ foo && obj.hits > 10000) {
curl.get(req.http.host + bar);
}
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
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
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
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";
}
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=/";
}
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
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
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
Firewall varnish
•
•
•
•
•
•

Mitigación de DDoS
Ataques SQL
XSS
URL malformadas
Robots y arañas
Vulnerabilidades
https://github.com/comotion/VSF
Firewall varnish
• Toma de decisiones
• Solo log
• Bloquear
• Devolver html
• Honey-trap
• Redirect / image
Firewall varnish

Te va a parar unos cuantos balones…

pero no es Lev Yashin
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
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;
}
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";
}
}
Autentificación harcoded en vcl
if(req.url ~ "^/protected/") {
if(!authentication.match("admin", "test")) {
error 401 "Authentication Required";
}
}
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
Reducir I/O de disco
“Si usas la RAM como almacén, todo Varnish
funciona en memoria”

SHM

¡NO!
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
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
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
Imágenes

No las cachees.
Imágenes
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
Longtail
•
•
•
•
•

Separar storages
Diferentes TTLs
TTLs por horas
TTLs por tipos de ficheros
TTLs por edad del contenido
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
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
Varnish Bans Manager
Varnish Administration Console
Gestor de bans libre
Hecho en A Coruña por dot2code

https://github.com/dot2code/varnish-bans-manager
Varnish Bans Manager
Web-manager en django/*SQL con ACLs

https://github.com/dot2code/varnish-bans-manager
Varnish Bans Manager
Monitorización de bans actuales y pasados
Varnish Bans Manager
Ban por nodo/grupo con expresiones regulares
Varnish Bans Manager
Monitorización de bans actuales y pasados
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
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");
¿Preguntas?

Más contenido relacionado

La actualidad más candente

TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
MizaelMartinez2
 
Presentacion instaladores os debian centos
Presentacion instaladores os debian centosPresentacion instaladores os debian centos
Presentacion instaladores os debian centos
OpenStack-VE
 
Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3
Loquenecesito,com
 

La actualidad más candente (20)

Conferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical HackingConferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical Hacking
 
Entorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con VagrantEntorno de desarrollo rápido con Vagrant
Entorno de desarrollo rápido con Vagrant
 
a little more about CaptureFilter
a little more about CaptureFiltera little more about CaptureFilter
a little more about CaptureFilter
 
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
TALLER: Implementar BigBlueButton en Amazon Web Services (AWS)
 
Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016Ansible DevOps Day Peru 2016
Ansible DevOps Day Peru 2016
 
Vagrant
VagrantVagrant
Vagrant
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
Jvmmx docker jvm
Jvmmx docker jvmJvmmx docker jvm
Jvmmx docker jvm
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Presentacion instaladores os debian centos
Presentacion instaladores os debian centosPresentacion instaladores os debian centos
Presentacion instaladores os debian centos
 
MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2 MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Organizando un datacenter virtual
Organizando un datacenter virtualOrganizando un datacenter virtual
Organizando un datacenter virtual
 
Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3
 
Optimización Servidor Web
Optimización Servidor WebOptimización Servidor Web
Optimización Servidor Web
 
Manejo de packages en Kubernetes con Helm
Manejo de packages en Kubernetes con HelmManejo de packages en Kubernetes con Helm
Manejo de packages en Kubernetes con Helm
 
Hack like a Pro with a custom gadgets - Taller BitUp 2018
Hack like a Pro with a custom gadgets - Taller BitUp 2018Hack like a Pro with a custom gadgets - Taller BitUp 2018
Hack like a Pro with a custom gadgets - Taller BitUp 2018
 
Jaime Casanova - Domando a la bestia Replicación
Jaime Casanova - Domando a la bestia ReplicaciónJaime Casanova - Domando a la bestia Replicación
Jaime Casanova - Domando a la bestia Replicación
 
Zabbix
ZabbixZabbix
Zabbix
 
Recopilación de Penetration Test Backtrack
Recopilación  de Penetration Test BacktrackRecopilación  de Penetration Test Backtrack
Recopilación de Penetration Test Backtrack
 

Similar a Sácale el jugo a Varnish

Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web Development
Jaime Irurzun
 

Similar a Sácale el jugo a Varnish (20)

Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web Development
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Bulma 441
Bulma 441Bulma 441
Bulma 441
 
Apache ha muerto, Viva Lighttpd
Apache ha muerto, Viva LighttpdApache ha muerto, Viva Lighttpd
Apache ha muerto, Viva Lighttpd
 
Seguridad en i pv6 (2)
Seguridad en  i pv6 (2)Seguridad en  i pv6 (2)
Seguridad en i pv6 (2)
 
Mi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeMi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nube
 
HTML5
HTML5HTML5
HTML5
 
Memoria sobre Squid3
Memoria sobre Squid3Memoria sobre Squid3
Memoria sobre Squid3
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
La nube, tu app y tu
La nube, tu app y tuLa nube, tu app y tu
La nube, tu app y tu
 
Instalacion y configuracion de squid 2.6 estable
Instalacion y configuracion de squid 2.6 estableInstalacion y configuracion de squid 2.6 estable
Instalacion y configuracion de squid 2.6 estable
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Voice OVER IP
Voice OVER IPVoice OVER IP
Voice OVER IP
 
Propietario
PropietarioPropietario
Propietario
 
Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...
Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...
Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...
 
[Meetup] Code Quality tools used at Wolox for Web developing.
[Meetup] Code Quality tools used at Wolox for Web developing.[Meetup] Code Quality tools used at Wolox for Web developing.
[Meetup] Code Quality tools used at Wolox for Web developing.
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (15)

presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Sácale el jugo a Varnish