Реальный IP-адрес посетителя сайта, подключенного к Cloudflare на PHP?

Question

Cloudflare – хорошее решение облачной защиты вашего сайта и кэширование информации на нем. Но вот незадача: при попытке получить реальный IP-адрес посетителя на PHP по такому принципу:

$user_ip = $_SERVER["REMOTE_ADDR"];
echo $user_ip;

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

Все дело в том, что Cloudflare при посещении вашего сайта дополнительно посылает несколько заголовков, один из которых – HTTP_CF_CONNECTING_IP, который и содержит в себе реальный IP-адрес посетителя. Мы можем проверить существование этого заголовка, и если он существует – отдавать нам его содержимое, а в противном случае – возвращать данные суперглобального массива $_SERVER.

На практике все это выглядит следующим образом:

if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
	$user_ip = $_SERVER["HTTP_CF_CONNECTING_IP"];
} else {
	$user_ip = $_SERVER["REMOTE_ADDR"];
}
echo $user_ip;

Так, независимо от того, подключен ваш сайт к Cloudflare или нет – вы получите реальный IP-адрес посетителя вашего сайта.

Leave an answer