Comment configurer Matomo lorsque le serveur se trouve derrière un proxy ?
Cette FAQ détaille les différents cas d’utilisation et de configuration lors de l’utilisation d’un proxy avec Matomo.
Si Matomo est derrière un proxy inverse
Si vous installez Matomo en vous connectant à travers un proxy inverse (https-à-http), la ligne suivante sera automatiquement ajoutée à votre fichier config/config.ini.php lors de l’installation de Matomo :
[General]
assume_secure_protocol = 1
Nous vous recommandons d’ajouter force_ssl lorsque vous configurez ce paramètre :
[General]
force_ssl = 1 ; ajoutez également cette ligne
assume_secure_protocol = 1 ; si vous ajoutez ceci
Ce faisant, vous vous assurez que vos e-mails sont envoyés avec des liens https:// et que tous les autres paramètres de contenu sécurisé liés à SSL (https://) fonctionnent comme prévu.
Notamment, tous les liens http:// seront redirigés en https://. Lire l’article Forcer Matomo à utiliser SSL (en anglais) pour plus d’informations.
Si vous installez Matomo depuis un proxy inverse (Matomo ne peut alors pas détecter que https est utilisé), vous devez définir les paramètres ci-dessus manuellement. De plus, en fonction de votre serveur proxy, l’adresse IP du visiteur est définie dans un en-tête HTTP différent qui devrait également être détecté automatiquement lors de l’installation et ajouté à votre config/config.ini.php :
[General]
; Si vous utilisez un proxy standard, décommentez la ligne ci-dessous
;proxy_client_headers[] = HTTP_X_FORWARDED_FOR
;proxy_host_headers[] = HTTP_X_FORWARDED_HOST
; Si vous utilisez CloudFlare, décommentez la ligne ci-dessous
;proxy_client_headers[] = HTTP_CF_CONNECTING_IP
; Si vous utilisez un autre proxy (qui définit l’en-tête Client-IP), décommentez la ligne ci-dessous
;proxy_client_headers[] = HTTP_CLIENT_IP
Si Matomo n’a pas pu détecter la configuration de votre proxy, ajoutez ces lignes manuellement dans votre fichier Matomo config.ini.php (supprimez le caractère « ; » pour activer le paramètre).
Sachez que PHP applique certaines modifications aux en-têtes : il les met en majuscules, préfixe ‘HTTP_’ et convertit les tirets en underscores. Donc, si votre proxy inverse envoie ‘X-Forwarded-For’, il est nécessaire de le spécifier dans la configuration comme ‘HTTP_X_FORWARDED_FOR’.
Il est aussi possible de tester plusieurs « proxy_client_headers », qui seront analysés les uns après les autres jusqu’à ce qu’une valeur d’en-tête soit trouvée. Par exemple, avec la configuration ci-dessous :
proxy_client_headers[] = HTTP_WAF_FORWARDED_FOR
proxy_client_headers[] = HTTP_LB_FORWARDED_FOR
proxy_client_headers[] = HTTP_X_FORWARDED_FOR
Cela signifie que le premier test portera sur l’en-tête ‘HTTP_WAF_FORWARDED_FOR’ et s’il n’existe pas, il portera sur ‘HTTP_LB_FORWARDED_FOR’ et celui-ci n’existe pas non plus, ce sera au tour de l’en-tête ‘HTTP_X_FORWARDED_FOR’. La syntaxe ‘array[]’ est un raccourci en PHP pour ‘array_push’ et s’ajoute donc au tableau existant.
Vous pouvez exclure les IP internes (par exemple les IP de LoadBalancer) de ces en-têtes en utilisant la configuration « proxy_ips[] » qui écarte certaines plages d’adresses IP. Par exemple, la configuration suivante ignorera les plages d’adresses IP internes couramment utilisées :
proxy_ips[] = 192.168../16
proxy_ips[] = 10.40../16
Il est également possible de le déboguer pour afficher les informations exactes dans le registre Matomo.
Considération de sécurité
Dès la version 5, Matomo lira par défaut la dernière adresse IP dans l’en-tête du proxy. La protection contre les en-têtes X-Forwarded-For usurpés, par exemple un en-tête « X-Forwarded-For » personnalisé envoyé par le client pour falsifier une adresse IP, s’en trouvera améliorée. Cette méthode peut être utilisée pour simuler une adresse IP de votre organisation et contourner des listes spécifiques d’adresses IP autorisées ou refusées.
Les versions antérieures de Matomo respectaient l’implémentation RFC7239 et lisaient toujours la première adresse IP dans l’en-tête d’un proxy.
En fonction de votre configuration, vous préférerez peut-être modifier ce mode pour que soit lue la première ou la dernière adresse IP, en définissant la configuration ci-dessous.
[General]
proxy_ip_read_last_in_list = 0
Cette option de configuration est disponible dès la version 4.4 de Matomo.
Si après la mise à jour vers Matomo 5 vous constatez des visites provenant d’adresses IP locales, alors pensez à configurer ‘proxy_ip_read_last_in_list = 0’
Notes
-
Si votre serveur utilise un proxy inverse IIS, ‘HTTP_X_FORWARDED_HOST’ doit être ajouté manuellement aux « Variables serveur autorisées » et ajouté {HTTP_HOST} à la règle de réécriture entrante et défini de telle sorte qu’il passe par la valeur HTTP_HOST d’origine fournie par le client à Matomo. En savoir plus.
-
Si vous utilisez Apache 2.4 ou Apache 2.5, une alternative existe : utilisez ‘mod_remoteip’ pour remplacer l’IP du client par l’IP fournie par un proxy ou un répartiteur de charge. Vous n’aurez alors pas besoin de spécifier ces paramètres de configuration de Matomo.
Si Matomo est connecté à un proxy inverse et installé dans un sous-chemin
Si vous utilisez Matomo derrière un proxy inverse avec un chemin différent comme ‘rewrite ^/matomo/(.*)$ /$1 break;’ (dans ‘nginx.conf’ quand Matomo est installé dans le chemin ‘/matomo’), vous aurez besoin de :
1) configurer votre serveur web pour qu’il fournisse un en-tête ‘HTTP_X_FORWARDED_URI’. Par exemple sur NGINX, quand Matomo est installé dans le chemin ‘/matomo’, vous devez insérer ‘proxy_set_header X-Forwarded-Uri /matomo;’ dans votre ‘nginx.conf’.
2) configurer Matomo pour qu’il lise cette HTTP_X_FORWARDED_URI afin de générer des URL correctes. Dans Matomo config/config.ini.php, dans la section ‘[General]’ ajoutez :
[General]
; Utilisez l’en-tête HTTP_X_FORWARDED_URI pour générer le nom du script actuel
proxy_uri_header = 1
Matomo est derrière un proxy sortant
Si votre serveur est configuré derrière un proxy sortant, consultez cette FAQ : Configuration facile d’un proxy sortant dans Matomo.