Получение клиентского IP при прохождении через обратный прокси

В моем VPS я размещаю несколько сайтов. каждый живет в своем собственном контейнере Linux. Например

Сайт № 1 -> 10.0.3.111

Сайт № 2 -> 10.0.3.112

Сайт № 3 -> 10.0.3.113

Чтобы знать, куда перенаправлять каждый запрос, у меня также есть обратный прокси-сервер nginx в другом контейнере Linux в 10.0.3.101

У меня проблема в том, что на одном из моих сайтов, на котором работает Laravel, я пытаюсь получить IP-адрес клиента, например так:

<p>IP Address: {{ Request::getClientIp() }}</p>

Проблема в том, что я получаю все время 10.0.3.101, а не IP клиента.

Я предполагаю, что Laravel получает IP-адрес последнего хоста, на который пришел запрос, а не начального, который начал запрос.

Есть ли способ, которым я мог бы получить этот IP, не меняя эту структуру?

Конфигурации

Это мой nginx hostfile:

server {
        listen 80;
        server_name example.com www.example.com;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://10.0.3.115;
        }
}

1 ответ

Решение

Вам нужно установить доверенный прокси. В таком случае getClientIp() буду использовать X-Forwarder-For заголовок, чтобы получить IP-адрес клиента.

Другие вопросы по тегам