$ _SERVER ['REMOTE_ADDR'] дает IP-адрес сервера вместо IP-адреса пользователя - PullRequest
0 голосов
/ 29 августа 2018

EDIT:

Я очистил кеш моего браузера и теперь мой PHP-код работает.


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

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

Если я размещу тот же код в сети на моем сервере, я снова получу IP-адрес сервера.

Я безуспешно пытался с:

function get_visitor_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
    }

    if($ipaddress == '') {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}

Но опять же, возвращается 127.0.0.1. Есть альтернативное решение?

1 Ответ

0 голосов
/ 29 августа 2018

Это означает, что ваш сервер, вероятно, находится за неким обратным прокси-сервером, таким как балансировщик нагрузки или CDN. Ваш PHP-сервер не получает прямых соединений от клиентов, эти соединения проходят через некоторое промежуточное звено ранее, поэтому IP-адрес этого промежуточного звена - это все, что видит ваш сервер.

В этой ситуации промежуточный прокси-сервер обычно перенаправляет фактический IP-адрес клиента в некотором указанном HTTP-заголовке на ваш PHP-сервер. Это когда вы очень явно и очень избирательно используете что-то вроде $_SERVER['HTTP_X_FORWARDED']; тогда и только тогда, когда вы знаете, что находитесь в подобной ситуации и какому HTTP-заголовку вы можете доверять. Обратитесь к документации по ситуации с вашим хостом / прокси / сетью, и она скажет вам, какой заголовок использовать.

...