Pour Serveur Cloud Linux et serveur HTTP Apache

Si Apache est derrière un Load Balancer, l'adresse IP réelle de l'utilisateur est écrasée par l'adresse IP de l'équilibreur de charge. Le fichier journal d'Apache ne contient plus que l'adresse du Load Balancer. Nous vous montrons comment vous pouvez également enregistrer l'adresse IP de l'utilisateur d'origine sous certaines conditions.

Dans ce cas, le protocole HTTP contient l'en-tête X-Forward For For. Cet en-tête est utilisé pour transmettre l'adresse IP de l'utilisateur lorsqu'il accède à un serveur Web par l'intermédiaire d'un proxy ou d'un répartiteur de charge. Cependant, comme Apache ne tient pas compte de cet en-tête par défaut, la configuration d'Apache doit être ajustée ici.

Remarque

Pour des raisons techniques, la transmission côté Load Balancer de l'IP - et donc la solution décrite ici - ne fonctionne qu'avec des accès non cryptés. Si l'appel est effectué via HTTPS, aucune entrée d'en-tête ne peut être effectuée, car la communication entre le client et le serveur Web est complètement cryptée (il n'est pas possible d'installer un certificat SSL séparé sur l'équilibreur de charge).

Voicic comment personnaliser les paramètres de journalisation d'Apache afin d'inclure l'en-tête X-Forward-For :

  • Dans le fichier de configuration Apache apache2.conf (CentOS : httpd.conf), ajoutez une entrée LogFormat avec la variable %{X-Forwarded-For}i.
    Exemple de directive LogFormat (nommée "proxy") :

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" proxy
  • Ajoutez une entrée CustomLog pour les domaines souhaités dans les fichiers de configuration des hôtes virtuels correspondants.
    Dans l'exemple suivant, Apache est invité à enregistrer les appels via domain-tld dans le fichier access.log au format "proxy" :

<VirtualHost domain.tld:80>
.
#CustomLog logs/access.log combined
CustomLog logs/access.log proxy
.
</VirtualHost>
  • Redémarrez le service Apache pour que le changement prenne effet.