VARNISH

De TwisterWiki
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.

Configuration apache

  • Ajoute d'un LogFormat spécifique

Les requêtes des internautes sont reçues par varnish qui ensuite interroge apache.

Pour apache l'adresse ip sources est alors celle du serveur varnish.

Nous allons donc définir un LogFormat qui utilisera "%{X-Forwarded-for}i"

LogFormat "%{X-Forwarded-for}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnish
  • Utilisation de ce LogFormat
CustomLog /var/log/apache2/access.log varnish
  • Log d'erreur apache

Pour le log d'erreur d'apache, il n'est pas possible de modifier le format de log. nous allons donc utiliser le module rpaf

apt-get install libapache2-mod-rpaf

Il n'y as rien d'autre à faire.

Configuration varnish

backend site1 {
   .host = "127.0.0.1";
   .port = "8080";
}
backend site2 {
   .host = "127.0.0.1";
   .port = "8080";
}
backend site3 {
   .host = "127.0.0.1";
   .port = "8080";
}

sub vcl_recv {
  /* on ajoute le header "X-forwarded-for" */
  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.http.host ~ "site2.mydomain") {
     set req.backend = site2;
}
if (req.http.host ~ "site3.mydomain") {
     set req.backend = site3;
}
  /* on cache pas */
  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 CONNECT which is weird. */
     return (pipe);
  }
  if (req.request != "GET" && req.request != "HEAD") {
     /* We only deal with GET and HEAD by default */
     return (pass);
  }
  if (req.url ~ "\.(jpg|png|gif|jpeg|css|js|pdf)$") {
     unset req.http.cookie;
     return(lookup);
  }
  if (req.http.Authorization || req.http.Cookie) {
     /* Not cacheable by default */
     return (pass);
  }
  /* fin des on cache pas */

  /* sinon on cache pas le reste */
  return (pass);
  /* application du backend */
  set req.backend = site1;
}

sub vcl_fetch {
       if (req.url ~ "\.(jpg|png|gif|css|js|jpeg|pdf)$") {
               unset beresp.http.set-cookie;
               unset beresp.http.Vary;
               set beresp.ttl = 1h;
       }
}

sub vcl_deliver {
       if (obj.hits > 0) {
               set resp.http.X-Cache = "HIT";
               set resp.http.X-Cache-Hits = obj.hits;
               set resp.http.X-Cache-Backend = req.backend;
       } else {
               set resp.http.X-Cache = "MISS";
       }
}


varnishlog

varnishlog -c  -m TxStatus:503