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()
Sácale el jugo a Varnish
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);
}
Sácale el jugo a Varnish
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");
Sácale el jugo a Varnish
Sácale el jugo a Varnish
¿Preguntas?

Más contenido relacionado

ODP
Ambientes de desarrollo y producción. Mejores prácticas con ansible
PDF
IdeaSpaceVR: como crear tu plataforma de realidad virtual
PPTX
Docker para integradores Asterisk
PDF
Creación de entornos de desarrollo con Vagrant
PDF
Entornos de desarrollo para symfony2 con vagrant y puppet
PDF
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
PDF
SUSE Studio 1.0 Bugcon09
PDF
Instalar git, github, node js, quasar
Ambientes de desarrollo y producción. Mejores prácticas con ansible
IdeaSpaceVR: como crear tu plataforma de realidad virtual
Docker para integradores Asterisk
Creación de entornos de desarrollo con Vagrant
Entornos de desarrollo para symfony2 con vagrant y puppet
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
SUSE Studio 1.0 Bugcon09
Instalar git, github, node js, quasar

La actualidad más candente (20)

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

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

PDF
Open Source Modern Web Development
PPTX
Docker 2014 v2
PDF
Bulma 441
ODP
Apache ha muerto, Viva Lighttpd
PPTX
Seguridad en i pv6 (2)
PDF
Mi timeline programando desde el notepad a la nube
PDF
Memoria sobre Squid3
ODP
Marcos quesada caching_sf2
PDF
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
PDF
Lw2010 Pedro Valera
PPTX
Jug málaga docker 101 - final
PDF
La nube, tu app y tu
PDF
Instalacion y configuracion de squid 2.6 estable
PDF
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
DOCX
4.1.2.10 Lab - Introduction to Wireshark - RESUELTO.docx
PDF
Docker y PostgreSQL
PPTX
Voice OVER IP
PDF
Propietario
PDF
Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...
Open Source Modern Web Development
Docker 2014 v2
Bulma 441
Apache ha muerto, Viva Lighttpd
Seguridad en i pv6 (2)
Mi timeline programando desde el notepad a la nube
Memoria sobre Squid3
Marcos quesada caching_sf2
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 Pedro Valera
Jug málaga docker 101 - final
La nube, tu app y tu
Instalacion y configuracion de squid 2.6 estable
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
4.1.2.10 Lab - Introduction to Wireshark - RESUELTO.docx
Docker y PostgreSQL
Voice OVER IP
Propietario
Implementación Docker Swarm en Amazon Web Services usando Auto Scaling Groups...
Publicidad

Último (20)

PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
MANUAL de recursos humanos para ODOO.pdf
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PPTX
Uso responsable de la tecnología - EEST N°1
PDF
Estrategia de apoyo valentina lopez/ 10-3
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PPT
Protocolos de seguridad y mecanismos encriptación
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PDF
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PDF
Distribucion de frecuencia exel (1).pdf
PPTX
El uso de las TIC en la vida cotidiana..
PPTX
Presentación final ingenieria de metodos
Historia Inteligencia Artificial Ana Romero.pptx
MANUAL de recursos humanos para ODOO.pdf
Presentacion de Alba Curso Auditores Internos ISO 19011
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Uso responsable de la tecnología - EEST N°1
Estrategia de apoyo valentina lopez/ 10-3
Documental Beyond the Code (Dossier Presentación - 2.0)
Protocolos de seguridad y mecanismos encriptación
TRABAJO DE TECNOLOGIA.pdf...........................
Mecanismos-de-Propagacion de ondas electromagneticas
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
Estrategia de Apoyo de Daylin Castaño (5).pdf
Distribucion de frecuencia exel (1).pdf
El uso de las TIC en la vida cotidiana..
Presentación final ingenieria de metodos

Sácale el jugo a Varnish