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");
Juil 272012
 

Si varnish est bien configuré, il envoie l’IP du client dans le paramètre HTTP X-Forwarded-For.

Pour le voir dans les logs apache2, il faut modifier le LogFormat utilisé et remplacer %h par %{X-Forwarded-For}i :

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined

Si vous avez du https ou d’autre accès au apache2 sans varnish, vous ne verrez pas l’IP client. Pour cela on peut avoir 2 LogFormats différents en fonction de l’IP source de la requête :

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_direct
 
SetEnvIf Remote_Addr '^127.0.0.' varnish
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined env=varnish
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined_direct env=!varnish
Mar 062012
 

Vous pouvez limiter l’accès à un site ou une partie du site avec Varnish.
C’est utile car les limitations par IP au niveau Apache2 ne fonctionne pas avec Varnish, car les IPs clients détectées sont celle du Varnish.
Ajoutez une acl avec la liste de vos IPs autorisées.

acl iplimit {
        {"1.2.3.4"};
        {"9.8.7.6"};
}

Ensuite ajoutez dans le vcl_recv par exemple :

if (!(client.ip ~ iplimit)) {
        return(error);
}