Nginx : récupérer les IP derrière haproxy

Nginx : récupérer les IP derrière haproxy

Depuis que j’utilise let’s encrypt pour mes certificats la gestion de nginx en reverse proxy devient de plus en plus fastidieuse. Tous mes certificats sont éparpillés sur différents container lxc ce qui m’oblige à réaliser des opérations manuelles à chaque renouvellement. De ce fait impossible d’utiliser un script de renouvellement automatique et cela implique d’autres problèmes. C’est pourquoi j’ai décidé de déployer un vrai reverse proxy avec Haproxy qui m’a été chaudement recommandé par un ami.

J’ai récupéré cette configuration que j’ai adapté à mon infrastructure. Tout fonctionne à merveille depuis quelques mois. Je génère mes certificats directement du serveur concerné sans me soucier du reverse proxy. Mais je me suis aperçu en consultant les logs et mon piwik, que toutes les requêtes portaient l’ip locale du container qui héberge Haproxy.

Au final il s’avérait que ma configuration n’était pas complète, il manquait quelques paramètres sur haproxy et surtout configurer nginx en mode « real ip ».

Nginx

Le mode real ip n’est pas vraiment un mode mais plutôt un module qui doit être activé à la compilation de nginx. Pour le vérifier.

Il faut ensuite chercher la ligne –with-http_realip_module, si elle est présente le module real ip est disponible. Pour info la version de nginx fournit par les dépôts officiels debian est déjà compilée avec le module. Il ne reste plus qu’à l’activer et le configurer.

On ajoute les lignes suivantes.

Petite explication de texte :

  • set_real_ip_from : Définit l’adresse de confiance celle du reverse proxy.
  • real_ip_header : Définit le champ d’en-tête de la requête dont la valeur sera utilisée pour remplacer l’adresse du client.
  • real_ip_recursive : Remplace la dernière adresse utilisée par une nouvelle.

Sur chaque Vhost concerné je rajoute le paramètre proxy_protocol comme indiquer :

A partir de là nginx est capable d’afficher les IP réelles de chaque visiteurs.

Haproxy

La configuration de Haproxy est très simple il suffit de rajouter les directives suivantes :

Par exemple pour que piwik affiche les IP réelles pour les visiteurs du blog :

Je redémarre les deux services :

Maintenant chaque requête effectuée sur mes serveurs  est affichée avec sa véritable IP et non celle du reverse proxy.

 

One thought on “Nginx : récupérer les IP derrière haproxy

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *