REMOTE_ADDR dans Docker

a marqué ce sujet comme résolu.

Bonjour,

j’ai un containeur php et je n’arrive pas à récuperer l’ip de mon client dans mon projet.

$_SERVER['REMOTE_ADDR'] retourne toujours l’adresse de la Gateway et pas l’adresse du client.

Si quelqu’un a une solution…

Voici de quoi faire un test simple :

docker-compose.yml =

version: '3.1'

services:
  test_addr:
    container_name: test_addr
    image:  php:7.4-apache
    volumes:
        - "./html:/var/www/html"
    restart: always
    ports:
      - 80:80

html/index.php =

<?php

echo 'REMOTE_ADDR = '.$_SERVER['REMOTE_ADDR']."\n";

?>

Quand on visite la page http://localhost/ on obtient :

REMOTE_ADDR = 172.20.0.1

+0 -0

Hello,

Ce comportement est dû au fait que ton conteneur est sur un réseau privé (créé par Docker).

Tu peux essaye $_SERVER['HTTP_CLIENT_IP'] pour voir si ça change quelque chose.


Sinon tu peux passer ton conteneur Docker en mode host pour la partie réseau (mais attention aux implications de sécurité : ton conteneur aura alors accès à l’intégralité du réseau de son hôte), évitant ainsi de passer par la gateway de Docker.

Merci pour ton aide.

J’ai fait des tests et avec un nginx normal (pas sous Docker), j’ai le même problème. Voici ma config :

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
          proxy_pass http://172.23.0.2/; # IP du container
          proxy_set_header   Host $host;
          proxy_set_header X-Real-Ip $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header REMOTE_ADDR $remote_addr;
        }
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte