CloudFlare - очень полезный сервис. О нём я как-нибудь расскажу отдельно. А пока небольшая заметка для тех, кто уже подключил его к своему сайту.
Если нужен реальный IP адрес посетителя в переменной REMOTE_ADDR, то нужно в nginx.conf в секции server{} или http{} добавить строки:
# для cloudflare real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0;
Если у вас обычный хостинг, а не vps и не выделенный сервер, то надо попросить техподдержку добавить эти строки. В случае с моим хостингом они сделали это за пару минут.
Разумеется, при работе Nginx в связке с Apache для того, чтобы в REMOTE_ADDR попадал ip адрес клиента, но не самого Nginx, нужно задать такое поведение строками:
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
После этого переменная REMOTE_ADDR будет получать правильный IP адрес.
Есть ещё варианты с перечислением IP диапазонов CloudFlare, например:
# для cloudflare real_ip_header X-Forwarded-For; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17;
Но тут могут возникнуть проблемы. CloudFlare развивается и IP адреса могут меняться, поэтому старые руководства могут стать неактуальны. Первый же вариант будет работать всегда, даже если вы поменяете CloudFlare на другой балансировщик нагрузки.