Подтвердить что ты не робот

$ _SERVER [ "REMOTE_ADDR" ] указывает IP-адрес сервера, а не IP-адрес посетителя

Я пытаюсь отслеживать IP-адреса посетителей. При использовании $_SERVER["REMOTE_ADDR"] я получаю IP-адрес сервера, а не посетителя. Я попробовал это на нескольких компьютерах в разных местах, и все они привели к тому же самому IP. Есть ли некоторые настройки PHP/сервера, которые могут повлиять на это?

4b9b3361

Ответ 1

REMOTE_ADDR нельзя доверять.

Во всяком случае, попробуйте

$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
    $ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}

Изменить: Кроме того, включен ли на вашем сервере маршрутизатор переадресация портов? Возможно, что он возится с пакетами.

Ответ 2

При использовании $_SERVER [ "REMOTE_ADDR" ] я получаю IP-адрес сервера, а не посетителя.

Тогда что-то не так, или странно, с вашей конфигурацией.

  • Используете ли вы какой-то обратный прокси? В этом случае предложение @simshaun может работать.

  • У вас есть что-то еще необычное в конфигурации вашего веб-сервера?

  • Можете ли вы показать код PHP, который используете?

  • Можете ли вы показать, как выглядит адрес. Является ли это локальным или интернет-адресом?

Ответ 3

$_SERVER['REMOTE_ADDR'] дает IP-адрес, с которого запрос был отправлен на веб-сервер. Обычно это адрес посетителя, но в вашем случае это звучит так, будто есть какой-то прокси-сервер, расположенный прямо перед веб-сервером, который перехватывает запросы, поэтому на веб-сервер он выглядит так, как будто запросы происходят оттуда.

Ответ 4

Не смотрите на IP-адреса, которые не заданы в ожидаемом заголовке. Просто выполните следующие действия, чтобы проверить все переменные сервера и выяснить, какой из них подходит для вашего случая:

print_r($_SERVER);

Ответ 5

Замена:

$_SERVER["REMOTE_ADDR"];

С

$_SERVER["HTTP_X_REAL_IP"];

Работал для меня.