IPinfoBox

Реальный IP посетителя за Cloudflare или балансировщиком

Как сервер за прокси может безопасно получить реальный IP посетителя: Nginx, Node.js и PHP.

Почему IP отличается

Когда перед сайтом стоит Cloudflare, балансировщик нагрузки или Nginx, подключения к вашему серверу приходят от этого прокси, и вы видите IP прокси вместо IP посетителя. IP посетителя находится в заголовке, который добавляет прокси.

Cloudflare

Cloudflare передаёт один IP посетителя в заголовке CF-Connecting-IP. Чтобы убедиться, что запрос действительно пришёл от Cloudflare, доверяйте этому заголовку только если IP подключения входит в опубликованные диапазоны IP Cloudflare (cloudflare.com/ips).

X-Forwarded-For

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

Nginx

С модулем real_ip перечислите диапазоны ваших прокси в set_real_ip_from и задайте real_ip_header равным CF-Connecting-IP или X-Forwarded-For. После этого логи и приложение будут получать IP посетителя.

Node.js и PHP

В Express задайте app.set("trust proxy", число прокси), и req.ip станет IP посетителя. В PHP используйте $_SERVER["HTTP_CF_CONNECTING_IP"] только если $_SERVER["REMOTE_ADDR"] является вашим собственным прокси.

Проверка

Если после настройки IP, который записывает ваш сайт, совпадает с IP на главной странице IPinfoBox, всё работает.

Проверьте свой IP и местоположение прямо сейчас.

Проверить мой IP