Guides on system administration, 3D printing and other technology related projects.

Get Your Visitors Real IP Addresses with Nginx and CloudFlare

Get Your Visitors Real IP Addresses with Nginx and CloudFlare

I use CloudFlare for my website, which acts as a reverse proxy. As a result, this causes the visitors’ IP addresses to my site to be logged as CloudFlare’s. Thankfully though CloudFlare includes a CF-Connecting-IP header with the visitor’s real IP address.

It’s quite simple to configure Nginx to log the real IP courtesy of the CF-Connecting-IP header.

Requirements:

Create a config file for Nginx

nano /etc/nginx/conf.d/cloudflare.conf

Add the following lines to the config file

# Location of file containing CloudFlare IP addresses
include /etc/nginx/cloudflare-ips;

Grab the list of CloudFlare’s latest IP ranges, and add them in the following format:

nano /etc/nginx/cloudflare-ips
# CloudFlare IP addresses
# > IPv4
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;
# > IPv6
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

Reload Nginx and from now on you’ll have your visitor’s real IP addresses showing instead of CloudFlares.

service nginx reload

© Eric Mathison 2017-2020.