Получить IP пользователя, используя cloudflare

Вероятно, вы ищете это: $_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, стоит его оставить.

published 2019-04-03 13dagger