Comment interpréter les adresses client dans les journaux Apache derrière un proxy ?

L'équipe Citead, mis à jour le

En bref. Apache consigne l’adresse IP du client de la requête avec %a et celle du pair de connexion avec %{c}a ; mod_remoteip sélectionne les adresses client transmises selon les réglages de confiance des proxys.

Définition : Derrière un proxy, le pair de connexion (connection peer) d’Apache est le serveur qui s’y connecte directement. Le module mod_remoteip d’Apache peut remplacer l’adresse IP du client de la requête par une adresse transmise par un proxy de confiance ; %a consigne cette adresse de requête, tandis que %{c}a conserve l’adresse du pair de connexion.

Points clés

  • Au 17 octobre 2026, la documentation sur les fichiers journaux d’Apache avertit que l’adresse figurant dans son exemple de journal au format commun peut appartenir à un proxy intermédiaire.
  • La référence des formats de journal d’Apache définit %a comme l’adresse IP du client de la requête et %{c}a comme l’adresse IP du pair de la connexion sous-jacente.
  • La documentation de mod_remoteip d’Apache indique que, lorsque RemoteIPHeader est configuré sans directives définissant les proxys de confiance, le module fait confiance à tous les hôtes qui présentent une adresse IP dans cet en-tête.

Pourquoi le journal d’accès affiche-t-il l’adresse d’un proxy ?

Un proxy relaie les requêtes entre un client et Apache. Le guide des fichiers journaux explique que le format de journal commun commence par %h, le champ de l’hôte distant. Lorsque HostnameLookups est activé, Apache tente de consigner un nom d’hôte à la place de l’adresse IP. Le guide avertit que l’adresse visible dans ce champ peut être celle d’un proxy intermédiaire.

La référence de mod_log_config précise que HostnameLookups Off est le réglage par défaut. La première colonne d’un journal existant s’interprète donc selon le format configuré : %h représente le nom ou l’adresse de l’hôte distant, %a représente l’adresse IP du client de la requête et %{c}a représente le pair de la connexion sous-jacente.

Comment Apache sélectionne-t-il une adresse client transmise par un proxy ?

La référence de mod_remoteip décrit RemoteIPHeader, qui désigne l’en-tête de requête contenant les adresses client, et RemoteIPTrustedProxy, qui identifie les proxys autorisés à les fournir. Son exemple de proxy de confiance comprend les lignes suivantes :

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy proxy.example.com

Ici, proxy.example.com est le nom d’hôte utilisé dans l’exemple d’Apache. La configuration d’un site doit désigner son véritable proxy de confiance. L’adresse substituée par le module intervient également dans l’autorisation fondée sur l’adresse IP avec Require ip.

Lorsque les adresses forment une chaîne séparée par des virgules, le module les traite de droite à gauche. Il s’arrête lorsqu’une adresse n’est pas reconnue comme étant de confiance pour fournir l’adresse précédente. La substitution s’applique pendant toute la durée de la requête, y compris lorsqu’un répartiteur de charge réutilise une connexion pour différents clients.

Comment conserver les deux adresses dans un journal ?

La référence des formats de journal autorise l’ajout de libellés littéraux à côté des champs d’adresse. L’exemple composé ci-dessous enregistre l’adresse de la requête et celle du pair de connexion dans un journal d’accès distinct :

LogFormat "client=%a peer=%{c}a" client_peer
CustomLog "logs/client_peer.log" client_peer

client contient l’adresse sélectionnée pour la requête, y compris après une éventuelle substitution par mod_remoteip. peer contient l’adresse de la connexion sous-jacente. Le guide des fichiers journaux d’Apache indique qu’un nom de fichier relatif pour le journal d’accès est résolu par rapport à ServerRoot.

La documentation de mod_remoteip fournit également %{remoteip-proxy-ip-list}n pour consigner la note du module contenant les proxys intermédiaires.

Termes associés

Questions fréquentes

Puis-je consigner X-Forwarded-For pour conserver la chaîne d’adresses d’origine ?

La documentation de mod_remoteip d’Apache indique que le module réécrit l’en-tête pour n’y laisser que les adresses non confirmées restantes, ou le supprime lorsque toutes les adresses sont de confiance. Consigner %{X-Forwarded-For}i peut donc enregistrer une valeur modifiée. La référence des formats de journal décrit comment copier un en-tête dans une variable d’environnement avec mod_setenvif, puis consigner cette variable avec %{VARNAME}e pour conserver une valeur antérieure.

Quelle directive accepte les adresses client privées transmises par un proxy ?

La même référence du module précise que RemoteIPInternalProxy fait confiance aux adresses client privées fournies par les proxys répertoriés. RemoteIPTrustedProxy laisse les adresses privées signalées dans l’en-tête au lieu de les accepter comme adresse IP du client.

Sources

  1. Apache Software Foundation, « Log Files », sans date
  2. Apache Software Foundation, « Apache Module mod_log_config », sans date
  3. Apache Software Foundation, « Apache Module mod_remoteip », sans date

Vérifiez comment une page se lit pour les moteurs de réponse. Ouvrir l’analyseur de score GEO

Testez une page et voyez quoi corriger en premier

L'analyse prend en général moins de 10 secondes et ne demande pas de compte.

400 000+ pages notées dans le benchmark public