Varnish
Faites briller vos applications et sites web !
Thibaud Juin
Thibaud Juin
Des centaines de sites Un même code
Optimisation
Optimisation du code
Une fonction/page
spécifique
Une fonction
commune à toutes
les pages
Optimisation
Évitons l'éternel recommencement,
utilisons le cache !
Varnish
Faites briller vos applications et sites web !
Thibaud Juin
Fonctionnement de Varnish
Mise en place
Aller plus loin !
Fonctionnement
VisiteurVarnishApache, BD...
Un serveur proxy inverse et cache HTTP
C'est quoi Varnish ?
VisiteurVarnishApache, BD...
Et pourquoi "Varnish" ?
Cache
Fonctionnement
C'est quoi Varnish ?
Fonctionnement
VisiteurVarnishApache, BD...
Cache
Load balancing
VCL : le langage de configuration
subvcl_recv {
if (req.restarts == 0){
if (req.http.x-forwarded-for){
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
}else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" &&
req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE"){
/* Non-RFC2616 or CONNECTwhichis weird. */
return(pipe);
}
if (req.request != "GET" && req.request != "HEAD"){
/* We only deal withGETandHEADby default */
return(pass);
}
if (req.http.Authorization|| req.http.Cookie){
return(pass);
...
Fonctionnement
Mettre en place Varnish
C'est très simple !
Une installation, une petite configuration...
- vitesse ou taille du cache ?
Quelques questions...
- Une même page varie t-elle en fonction de l'utilisateur ? Panier, compte
utilisateur...
- GET et POST utilisés à bon escient ?
Utile :
- Utilisation des en-têtes HTTP de cache
- Mod Rpaf (apache)
- Vider le cache
Aller plus loin !
Configuration avec le VCL
Réception d'une requête
calcul du hash
HIT MISS
Requête au backend
Envoi de la réponse
Aller plus loin !
Vider le cache
sub vcl_recv {
if (req.request == "BAN") {
# Same ACL check as above:
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
ban("req.http.host == " + req.http.host +
"&& req.url == " + req.url);
# Throw a synthetic page so the
# request won't go to the backend.
error 200 "Ban added";
}
}
Aller plus loin !
Filtrer les requêtes
if(req.request != "GET" && req.request != "POST" req.request != "HEAD"){
error 405 "Not allowed.";
}
if(req.http.host == "beta.42stores.com" ){
set req.backend = beta;
}
else{
set req.backend = apache;
}
Aller plus loin !
Réécriture d'URL
if (req.url ~ "^/ex/") {
set req.url = regsub(req.url, "^/ex/(.*)$", "/exemple/1");
}
if (req.host == "exemple.com") {
set req.host = "www.exemple.com";
}
Pour terminer...
Varnish Cache is really, really fast. It typically speeds up delivery with a
factor of 300 - 1000x, depending on your architecture.
Performant
Flexible
Robuste
Convaincu ?
Des questions ?
Présentation réalisée avec Bunkr !
$ apt-get install varnish

Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web

  • 1.
    Varnish Faites briller vosapplications et sites web ! Thibaud Juin
  • 2.
    Thibaud Juin Des centainesde sites Un même code Optimisation
  • 3.
    Optimisation du code Unefonction/page spécifique Une fonction commune à toutes les pages
  • 4.
  • 5.
    Varnish Faites briller vosapplications et sites web ! Thibaud Juin
  • 6.
    Fonctionnement de Varnish Miseen place Aller plus loin !
  • 7.
    Fonctionnement VisiteurVarnishApache, BD... Un serveurproxy inverse et cache HTTP C'est quoi Varnish ?
  • 8.
    VisiteurVarnishApache, BD... Et pourquoi"Varnish" ? Cache Fonctionnement C'est quoi Varnish ?
  • 9.
  • 10.
    VCL : lelangage de configuration subvcl_recv { if (req.restarts == 0){ if (req.http.x-forwarded-for){ set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; }else { set req.http.X-Forwarded-For = client.ip; } } if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE"){ /* Non-RFC2616 or CONNECTwhichis weird. */ return(pipe); } if (req.request != "GET" && req.request != "HEAD"){ /* We only deal withGETandHEADby default */ return(pass); } if (req.http.Authorization|| req.http.Cookie){ return(pass); ... Fonctionnement
  • 11.
    Mettre en placeVarnish C'est très simple ! Une installation, une petite configuration... - vitesse ou taille du cache ? Quelques questions... - Une même page varie t-elle en fonction de l'utilisateur ? Panier, compte utilisateur... - GET et POST utilisés à bon escient ? Utile : - Utilisation des en-têtes HTTP de cache - Mod Rpaf (apache) - Vider le cache
  • 12.
    Aller plus loin! Configuration avec le VCL Réception d'une requête calcul du hash HIT MISS Requête au backend Envoi de la réponse
  • 13.
    Aller plus loin! Vider le cache sub vcl_recv { if (req.request == "BAN") { # Same ACL check as above: if (!client.ip ~ purge) { error 405 "Not allowed."; } ban("req.http.host == " + req.http.host + "&& req.url == " + req.url); # Throw a synthetic page so the # request won't go to the backend. error 200 "Ban added"; } }
  • 14.
    Aller plus loin! Filtrer les requêtes if(req.request != "GET" && req.request != "POST" req.request != "HEAD"){ error 405 "Not allowed."; } if(req.http.host == "beta.42stores.com" ){ set req.backend = beta; } else{ set req.backend = apache; }
  • 15.
    Aller plus loin! Réécriture d'URL if (req.url ~ "^/ex/") { set req.url = regsub(req.url, "^/ex/(.*)$", "/exemple/1"); } if (req.host == "exemple.com") { set req.host = "www.exemple.com"; }
  • 16.
    Pour terminer... Varnish Cacheis really, really fast. It typically speeds up delivery with a factor of 300 - 1000x, depending on your architecture. Performant Flexible Robuste
  • 17.
    Convaincu ? Des questions? Présentation réalisée avec Bunkr ! $ apt-get install varnish