Вероятно, вы ищете это: $_SERVER["HTTP_CF_CONNECTING_IP"]
или
$ip = $_SERVER["HTTP_CF_CONNECTING_IP"] ?? $_SERVER["X-Forwarded-For"] ?? $_SERVER['REMOTE_ADDR'];
Т.к. cloudflare проксирует запросы через свои сервера, $_SERVER['REMOTE_ADDR']
выдает ip адрес одного из серверов вместо ip пользователя.
Cloudflare добавляет несколько заголовков в запросы и ответы сервера. В заголовке запроса HTTP_CF_CONNECTING_IP
лежит правильный ip пользователя.
С помощью конфига nginx
Если вы хотите решить задачу админским путем, посмотрите решение для nginx. Оно использует ngx_http_realip_module.
Для yii2
Если вы используете Yii2, измените web-конфиг (тот, что по умолчанию в config/web.php
) добавив параметр ipHeaders в request примерно так:
'request' => [
'ipHeaders' => [
'CF-Connecting-IP',
'X-Forwarded-For',
],
],
X-Forwarded-For
это заголовок по умолчанию в Yii, стоит его оставить.