Astuce: configuration de piwik avec Apache2 + Varnish cache

Ces derniers temps de nombreux articles sont parus autour du reverse proxy Varnish sur planet-libre et autres blogs en relation avec le libre.

Les gains de performances qu’il peut apporter à une infrastructure web sont époustouflants et nous l’avons bien entendu mis en place sur notre serveur qui héberge le blog.

Pourd’avoir une idée de l’engouement des visiteurs pour notre prose de libriste, un outil de statistique libre a été mis en place, j’ai nommé Piwik! Cependant un petit soucis est apparu avec l’arrivé de varnish; piwik ne fonctionnait plus.

Piwik + Varnish = PB, Ok mais pourquoi ?

Le seul visiteur de notre blog était 127.0.0.1, ce qui est normal car dans une infrastructure web utilisant un reverse proxy,  celui-ci est en « Front » de l’installation et sert le maximum de requête http via son cache. Le serveur web est lui monté en « Backend », c’est à dire qu’il sert les requêtes que Varnish n’a pas été en mesure de servir.

Piwik ne pouvant plus utiliser les en-têtes d’Apache, celui-ci soit être configuré pour utiliser les en-têtes X-varnish. Les en têtes HTTP X-varnish permettent d’avoir les bonnes entrées dans les fichiers de log à chaque hit sur le serveur.

Résolution et configuration

Pour la configuration d’Apache, on copie le format « combiné » journal pour un nouveau que nous appelons « varnishcombined ». On modifie le champ IP du client à utiliser le contenu de la variable nous avons mis dans la configuration de Varnish.

Ajouter des lignes dans /etc/apache2/httpd.conf :

SetEnvIf X-Forwarded-For "(([^, ]*)$)" BROWSERIP=$1
LogFormat "%{BROWSERIP}e %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" varnishcombined

Pour conserver les infos des clients connectés sur le backend Apache (ips etc..) et éviter d’avoir un beau 127.0.0.1 dans vos stats, modifier votre fichier.vcl :

sub vcl_recv {
# Add a unique header containing the client address
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
# [...]
}

Dans la configuration de chacun de vos vhost, il faut précisier le nouveau format de log utilisé :

CustomLog /var/log/apache2/blog-access.log varnishcombined

Il reste maintenant à configurer notre Piwik préféré pour qu’il comprenne Varnish. Editez dans Piwik config/config.ini.php et décommentez la ligne suivante (ou bien rajoutez-là si elle n’existe pas) :

[General]
;proxy_client_headers[] = HTTP_X_FORWARDED_FOR

Sources

Merci à nordbeastie.org pour ses conseils et son aide :)

https://www.varnish-cache.org/docs/3.0/faq/http.html?highlight=log

http://fr.piwik.org/faq-de-piwik/installation/#faq_98

Vus : 2628
Publié par Openwebtech : 26