Cloudflare выдает мне неправильный IP-адрес при использовании getenv (REMOTE_ADDR)

У меня есть тестовый PHP-код. Который по сути захватывает IP-адрес кого-то и отправляет его по электронной почте на адрес. Позже я планирую сохранить его в базе данных, но только для целей тестирования я поставил его как электронное письмо.

Моя проблема в том, что у меня включен cloudflare, поэтому, когда я использую getenv(REMOTE_ADDR) это дает мне IP-адрес cloudflare, а не реальный IP-адрес посетителей. Есть ли способ получить IP-адрес посетителя?

<?php
$ip = getenv(REMOTE_ADDR);
mail("[email protected]", "You got a visitor", "IP: ".$ip);
?>

-1

Решение

Конечно, Cloudflare скрывает реальный адрес вашего сервера от пользователя путем посредничества в соединении (обратный прокси-сервер), и с той же скоростью вы видите IP-адрес прокси-сервера, обращающийся к странице, а не пользователя.

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

Попробуйте еще раз с $_SERVER['HTTP_CF_CONNECTING_IP'] вместо getenv(REMOTE_ADDR) и посмотрим, что получится.

0

Другие решения

Если вы используете Nginx, вы также можете просто исправить это на уровне веб-сервера, прежде чем PHP подключится, и в этом случае $ip = getenv(REMOTE_ADDR); затем даст вам «реальный» IP-адрес посетителя. В nginx вы должны занести в белый список IP-адреса Cloudflare в файле nginx.conf, используя set_real_ip_from XXX для каждого из диапазонов IP-адресов Cloudflare.

Без исправления уровня веб-сервера я использовал:

if ($ip=='') $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];

Когда я исправил проблему регистрации IP-адресов на уровне веб-сервера, я использовал:

if ($ip=='') $ip = $_SERVER['REMOTE_ADDR'];
0

По вопросам рекламы [email protected]