Jan 222015
 

Avec Varnish 4 le X-Forwarded-For est ajouté automatiquement avant le vcl_recv :
https://www.varnish-cache.org/docs/trunk/whats-new/upgrading.html#x-forwarded-for-is-now-set-before-vcl-recv

Si vous avez un autre cache ou proxy devant le varnish qui ajoute déjà le X-Forwaded-For et voulez enlever l’IP de ce proxy à la liste X-Forwarded-For. Vous pouvez utiliser ceci :

set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For,", ([0-9]{1,3}\.){3}([0-9]{1,3})$","");

ou

set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For, "^(.*),([^,]+)$", "\1");
Jan 212015
 

Sur varnish 3, il fallait ajouter du code c pour ajouter le header Expires correspondant au max-age du Cache-Control :
Varnish : transformer le Cache-Control : max-age en Expires

Maintenant une ligne suffit :
Dans le vcl_backend_response :

if (beresp.http.cache-control ~ "max-age=" ) {
        set beresp.http.Expires = "" + (now + std.duration(regsub(beresp.http.cache-control,"max-age=([0-9]+).*$","\1")+"s", 0s));
}

ou dans le vcl_deliver :

if (resp.http.cache-control ~ "max-age=" ) {
        set resp.http.Expires = "" + (now + std.duration(regsub(resp.http.cache-control,"max-age=([0-9]+).*$","\1")+"s", 0s));
}
Sep 242014
 

Ajoutez dans le vcl_recv :

if (req.http.cookie) {
       set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
       set req.http.Cookie = regsuball(req.http.Cookie, "_gat?=[^;]+(; )?", "");
       if (req.http.Cookie ~ "^$") {
              unset req.http.cookie;
       }
}

Maj 24/09/2014 : Ajout d’une règle pour les nouveaux cookies Universal Analytics

Sep 162014
 

Par défaut, si vous utilisez la configuration en malloc sans option, varnish crée un espace de stockage nommé s0 en ram.
Mais vous pouvez utiliser plusieurs stockages en ram ou sur disque pour garantir des performances en fonction de votre besoin.
Par exemple, pour qu’un site ne remplisse par le cache et impacte sur un autre :
– Dans le fichier /etc/default/varnish

DAEMON_OPTS="
...
-s default=malloc,64m \
-s foo=malloc,128M \
-s bar=malloc,128M \
..."

– Dans vcl_backend_response (4.0) :

if (bereq.http.host ~ "foo") {
       set beresp.storage_hint = "foo";
} else if (bereq.http.host ~ "bar") {
       set beresp.storage_hint = "bar";
} else {
       set beresp.storage_hint = "default";
}

ou vcl_fetch (3.0) :

if (req.http.host ~ "foo") {
       set beresp.storage = "foo";
} else if (req.http.host ~ "bar") {
       set beresp.storage = "bar";
} else {
       set beresp.storage = "default";
}

Par exemple, en fonction du TTL :
– Dans le fichier /etc/default/varnish

DAEMON_OPTS="
...
-s ram=malloc,1G \
-s disk=file,/space/varnish/storage,10G \
..."

– Dans vcl_backend_response (4.0) ou vcl_fetch (3.0) :

sub vcl_backend_response {
       # default storage
       set beresp.storage = "ram";
...
       if (beresp.ttl > 86400s) {
              set beresp.storage = "disk";
       }
}