Tous les produits
Search
Centre de documentation

Server Load Balancer:Récupérer l'adresse IP du client sur un serveur backend

Dernière mise à jour :Aug 21, 2026

Lorsque ALB transfère les requêtes, l'adresse IP source visible par un serveur backend correspond à l'adresse IP de l'instance ALB. ALB peut ajouter l'adresse IP réelle du client au champ X-Forwarded-For de l'en-tête HTTP. Vous pouvez récupérer cette information en appliquant une configuration simple sur votre serveur backend.

Le champ X-Forwarded-For respecte le format suivant :

X-Forwarded-For: <real client IP, proxy server 1-IP, proxy server 2-IP, ...>

Procédure

Étape 1 : Vérifier la configuration de l'écouteur pour X-Forwarded-For

  1. Connectez-vous à la console ALB, puis cliquez sur l'ID de l'instance cible pour accéder à la page Instance Details.

  2. Dans l'onglet Listener, cliquez sur l'ID de l'écouteur cible. Sur la page Listener Details, dans la section Basic Information, vérifiez que l'option Add HTTP Header est configurée pour inclure X-Forwarded-For.

    Cette option est activée par défaut. Si ce n'est pas le cas, cliquez sur Modify Listener dans la section Basic Information et activez-la dans la section Advanced Settings.

Étape 2 : Configurer le serveur backend

  • Cette rubrique explique comment enregistrer l'adresse IP réelle du client dans le journal d'accès de votre serveur backend (via le champ X-Forwarded-For). Les variables de la couche de connexion du serveur (telles que $remote_addr dans Nginx et %h dans Apache) restent définies sur l'adresse IP de transfert ALB (adresse IP locale) et ne sont pas affectées.

  • Si vous souhaitez remplacer directement les variables de la couche de connexion par l'adresse IP réelle du client (afin que la journalisation existante, le contrôle d'accès et les autres règles basées sur ces variables fonctionnent sans modification), consultez la section Comment permettre à Nginx ou Apache de récupérer directement l'adresse IP réelle du client (remplacement de l'adresse de la couche de connexion).

Serveur Nginx

Cette rubrique utilise un serveur Nginx exécutant Alibaba Cloud Linux 3.2104 et nginx/1.20.1 à titre d'exemple. La configuration réelle peut varier selon votre environnement.

Nginx utilise le module http_realip_module pour analyser l'en-tête X-Forwarded-For et récupérer l'adresse IP réelle du client.

  1. Vérifiez que le module est installé : sur le serveur, exécutez la commande nginx -V 2>&1 | grep --color=auto http_realip_module. Si la sortie contient --with-http_realip_module, le module est installé.

    image

    Pour les distributions Linux courantes, Nginx installé via un gestionnaire de packages tel que yum ou apt inclut généralement ce module par défaut. Si le module n'est pas installé, nous vous recommandons d'installer ou de mettre à niveau Nginx à l'aide d'un gestionnaire de packages.
  2. Modifiez le fichier de configuration Nginx : exécutez sudo nginx -t pour trouver le chemin d'accès au fichier de configuration. Le chemin par défaut est généralement /etc/nginx/nginx.conf.

    http {
        # Ensure the log format includes $http_x_forwarded_for to record the value of the X-Forwarded-For header.
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';    
        # Ensure the access log uses the preceding log format.             
        access_log  /var/log/nginx/access.log  main;
        #  ...
    }
  3. Rechargez la configuration : exécutez sudo nginx -t pour vérifier la syntaxe de la configuration. Si la syntaxe est correcte, exécutez sudo nginx -s reload pour appliquer les modifications.

Serveur Apache

Cette rubrique utilise un serveur Apache exécutant Alibaba Cloud Linux 3.2104 et Apache/2.4.37 à titre d'exemple. La configuration réelle peut varier selon votre environnement.

Apache utilise le module mod_remoteip pour analyser l'en-tête X-Forwarded-For et récupérer l'adresse IP réelle du client.

  1. Vérifiez que le module est installé : sur le serveur, exécutez la commande httpd -M | grep remoteip_module. Si la sortie contient remoteip_module (shared), le module est installé.

    image

    Pour les distributions Linux courantes, Apache installé via un gestionnaire de packages tel que yum ou apt inclut généralement ce module par défaut. Si le module n'est pas installé, nous vous recommandons d'installer ou de mettre à niveau Apache à l'aide d'un gestionnaire de packages.
  2. Modifiez le fichier de configuration Apache : exécutez httpd -V pour trouver le chemin d'accès au fichier de configuration. Le chemin par défaut est généralement /etc/httpd/conf/httpd.conf.

    # ...
    <IfModule log_config_module>
    # ...
    # Ensure the log format includes %{X-Forwarded-For}i to record the value of the X-Forwarded-For header.
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
    # ...
    # Ensure the access log uses the preceding log format.
    CustomLog "logs/access_log" combined
    </IfModule>
    # ...
  3. Rechargez la configuration : exécutez sudo systemctl restart httpd pour appliquer les modifications.

Serveur IIS

Cette rubrique utilise un serveur IIS exécutant Windows Server 2022 21H2 et IIS 10.0 à titre d'exemple. La configuration réelle peut varier selon votre environnement.

  1. Dans le volet Connections d'IIS Manager, sélectionnez le serveur cible. Dans le volet principal, double-cliquez sur Logging.

    image

  2. Dans la section Log File, cliquez sur Select Fields.

    image

  3. Dans la boîte de dialogue W3C Logging Fields, cliquez sur Add Field. Dans la boîte de dialogue Add Custom Field, configurez les informations du champ, puis cliquez sur OK.

    • Field Name : saisissez X-Forwarded-For.

    • Source Type : conservez la valeur par défaut, Request Header.

    • Source : saisissez X-Forwarded-For.

    image

  4. Confirmez que le champ personnalisé a été ajouté et cliquez sur OK.

    image

  5. Dans le volet Actions à droite, cliquez sur Apply pour enregistrer les modifications.

    image

Étape 3 : Vérifier la récupération de l'adresse IP du client

Consultez le journal d'accès du serveur web backend pour vérifier qu'il a bien récupéré l'adresse IP réelle du client.

Serveur Nginx

Le chemin par défaut du journal d'accès Nginx est /var/log/nginx/access.log.

Dans chaque entrée de journal, la valeur de la variable $http_x_forwarded_for correspond à l'adresse IP réelle du client.

image

Serveur Apache

Le chemin par défaut du journal d'accès Apache est /var/log/httpd/access_log.

Dans chaque entrée de journal, la valeur de la variable %{X-Forwarded-For}i correspond à l'adresse IP réelle du client.

image

Serveur IIS

Le chemin par défaut du journal d'accès IIS est %SystemDrive%\inetpub\logs\LogFiles.

Dans chaque entrée de journal, la valeur du dernier champ X-Forwarded-For correspond à l'adresse IP réelle du client.

image

Bonnes pratiques de production

  • Validez et filtrez l'en-tête X-Forwarded-For : sur votre serveur backend, validez et filtrez l'en-tête X-Forwarded-For. Rejetez les entrées mal formatées ou contenant des adresses IP non fiables.

  • Utilisez des politiques de sécurité : utilisez des groupes de sécurité ou d'autres politiques de sécurité tierces entre ALB et vos serveurs backends pour restreindre et filtrer les requêtes malveillantes comportant un en-tête X-Forwarded-For falsifié.

  • Chiffrement TLS : utilisez le chiffrement TLS pour protéger les communications entre les composants, y compris la transmission de l'en-tête X-Forwarded-For. Cela permet d'atténuer les risques d'attaques de type « man-in-the-middle » et de falsification des données.

FAQ

Accès fréquents depuis des adresses IP commençant par 100

  • Les instances ALB mises à niveau utilisent des adresses IP privées (adresses IP locales) issues des blocs CIDR des vSwitch associés pour communiquer avec les serveurs backends.

  • Les instances ALB non mises à niveau utilisent la plage d'adresses 100.64.0.0/10, réservée par Alibaba Cloud et ne présentant aucun risque de sécurité, pour communiquer avec les serveurs backends.

En plus de transférer les requêtes vers les serveurs backends, ALB effectue également des contrôles d'intégrité continus sur ces derniers. Si vous utilisez une instance ALB non mise à niveau, les journaux d'accès de votre serveur backend afficheront de nombreuses requêtes provenant d'adresses IP de la plage 100.64.0.0/10.

Pour garantir une connectivité appropriée entre votre instance ALB et vos services backends, assurez-vous qu'iptables ou tout autre logiciel de sécurité tiers installé sur vos instances ECS backends ne bloque pas le bloc CIDR du vSwitch de l'instance ALB ni la plage d'adresses 100.64.0.0/10.

Récupération de l'adresse IP du client avec WAF, CDN ou GA

Si le trafic est acheminé par des services tels que Web Application Firewall (WAF), Content Delivery Network (CDN) ou Global Accelerator (GA) avant d'atteindre ALB, vous pouvez également récupérer l'adresse IP réelle du client à partir du champ X-Forwarded-For. Ces produits transfèrent cet en-tête par défaut et ne nécessitent aucune configuration supplémentaire.

Pour empêcher la falsification de X-Forwarded-For, vous pouvez utiliser d'autres en-têtes HTTP pour enregistrer l'adresse IP réelle du client :

  • Utilisez l'en-tête Ali-Cdn-Real-Ip d'Alibaba Cloud CDN. L'architecture est Client > CDN > WAF > ALB > ECS.

    1. Par défaut, CDN ajoute l'en-tête de requête Ali-Cdn-Real-Ip aux requêtes transférées vers le serveur d'origine. Cet en-tête transmet l'adresse IP réelle du client qui s'est connecté au point de présence (POP) du CDN.

    2. Lors de l'intégration avec WAF, sélectionnez Ali-Cdn-Real-Ip comme en-tête personnalisé pour la détection de l'adresse IP du client.

    3. Configurez la variable de journal $http_Ali_Cdn_Real_Ip sur le serveur Nginx backend pour récupérer l'adresse IP réelle du client à partir de ce champ.

  • Utilisez l'action Insert Header dans la règle de transfert d'un écouteur ALB pour ajouter un en-tête HTTP (paire clé-valeur) à la requête. L'architecture est Client > GA > ALB > ECS.

    1. Dans la règle de transfert de l'écouteur ALB, définissez l'option Action sur Insert Header. Dans cet exemple, la clé est client-real-ip et la valeur est définie sur System-defined - Client IP Address.

    2. Pour l'écouteur, activez l'option Retrieve Client IP et ajoutez les adresses IP publiques de sortie du endpoint GA à la liste des adresses IP approuvées.

    3. Configurez la variable de journal $http_client_real_ip sur le serveur Nginx backend pour récupérer l'adresse IP réelle du client à partir de ce champ.

Récupération de l'adresse IP du client dans un environnement ACK

Pour plus d'informations, consultez la section Configurer des instances ALB à l'aide d'AlbConfig.

Comment permettre à Nginx ou Apache de récupérer directement l'adresse IP réelle du client (remplacement de l'adresse de la couche de connexion)

Nginx

Par défaut, $remote_addr dans les journaux Nginx enregistre l'adresse IP de transfert ALB (adresse IP locale). Pour la remplacer par l'adresse IP réelle du client (afin que la journalisation existante et les règles de contrôle d'accès fonctionnent sans modification), utilisez le module ngx_http_realip_module :

  1. Exécutez nginx -V | grep http_realip_module pour vérifier que le module est installé.

  2. Dans le fichier de configuration (par défaut : /etc/nginx/nginx.conf), ajoutez les éléments suivants au bloc http :

    set_real_ip_from  <vSwitch CIDR block of the instance>;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
    Si vous utilisez une instance ALB non mise à niveau, définissez set_real_ip_from sur 100.64.0.0/10 .
  3. Exécutez sudo nginx -t pour vérifier la syntaxe, puis exécutez sudo nginx -s reload pour recharger la configuration.

Une fois la configuration effective, consultez le journal d'accès (par défaut : /var/log/nginx/access.log ) pour vérifier que $remote_addr affiche désormais l'adresse IP réelle du client.
Si le trafic traverse plusieurs proxys tels que WAF ou CDN, ajoutez les plages d'adresses IP d'origine de chaque couche de proxy à set_real_ip_from .
Les requêtes de contrôle d'intégrité ne contiennent pas l'en-tête X-Forwarded-For , donc $remote_addr pour ces requêtes affiche toujours le bloc CIDR du vSwitch de l'instance ALB (ou 100.64.0.0/10 pour les instances non mises à niveau). Il s'agit d'un comportement attendu.

Apache

Par défaut, %h dans les journaux Apache enregistre l'adresse IP de transfert ALB (adresse IP locale). Pour la remplacer par l'adresse IP réelle du client (afin que la journalisation existante et les règles de contrôle d'accès Require ip fonctionnent sans modification), utilisez le module intégré mod_remoteip d'Apache 2.4 :

  1. Exécutez httpd -M | grep remoteip_module pour vérifier que le module est installé.

  2. Dans le fichier de configuration (par défaut : /etc/httpd/conf/httpd.conf), ajoutez les éléments suivants :

    RemoteIPHeader       X-Forwarded-For
    RemoteIPTrustedProxy <vSwitch CIDR block of the instance>
    Si vous utilisez une instance ALB non mise à niveau, définissez RemoteIPTrustedProxy sur 100.64.0.0/10 .
  3. Exécutez sudo systemctl restart httpd pour redémarrer Apache.

Une fois la configuration effective, consultez le journal d'accès (par défaut : /var/log/httpd/access_log ) pour vérifier que %h affiche désormais l'adresse IP réelle du client.
Si le trafic traverse plusieurs proxys tels que WAF ou CDN, ajoutez les plages d'adresses IP d'origine de chaque couche de proxy à RemoteIPTrustedProxy .
Les requêtes de contrôle d'intégrité ne contiennent pas l'en-tête X-Forwarded-For , donc %h pour ces requêtes affiche toujours le bloc CIDR du vSwitch de l'instance ALB (ou 100.64.0.0/10 pour les instances non mises à niveau). Il s'agit d'un comportement attendu.