Cloudflare reverse proxy
Cloudflare достаточно популярный сервис, предоставляющий много нужных и полезных услуг. Наверное, самая распространенная — это их reverse proxy, которая позволяет расположить свой сайт за облачными кэширующими прокси серверами. Это позволяет как уменьшить нагрузку на сайт, так и ускорить отдачу контента сайта.
Но тут можно столкнуться с ситуацией, когда IP адреса посетителей окажутся «спрятанными» за адресами прокси серверов. В частности, если в коде сайта используются данные HTTP заголовков для получение адреса, то туда будут попадать адреса прокси серверов, а не реальных посетителей. К примеру, если пользоваться переменной $_SERVER['REMOTE_ADDR']
в PHP. Соответственно, если в коде сайта реализован некоторый функционал, который использует пользовательские IP адреса (н-р, аналитика, статистика), то поступающие в него данные будут неточными.
К счастью, сервера Cloudflare передают свои дополнительные поля в заголовках и для отслеживания реального адреса клиента подойдет заголовок CF-Connecting-IP, который и покажет исходный адрес посетителя. В PHP к нему можно обратиться через переменную $_SERVER[«HTTP_CF_CONNECTING_IP»].
Кроме этого, Cloudflare может передавать еще несколько полезных заголовков, к примеру, CF-IPCountry ($_SERVER[«HTTP_CF_IPCOUNTRY»]). В нем содержится двухзначный код страны, к которой относится IP адрес пользователя.
Подробнее:
Более детально о заголовках, передаваемых прокси серверами можно прочитать на официальном сайте в разделе поддержки, к примеру, тут: https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-