Skip to content

Get real IP address behind cloudflare NGINX

Pre requisites

You may need to install the Real IP Module ⧉ if this is on bare metal

apt-get install nginx-extras

If you are using containerised Nginx, then it comes pre-installed

Create cloudflare IP file

Under your nginx directory, create a file called cloudflare.conf

touch cloudflare.conf

Edit the cloudflare file

nano cloudflare.conf
vi cloudflare.conf

In the window that opened, paste in the below:

Freshness of the Ranges

This range is updated daily when the site is built

# nginx.conf
real_ip_recursive on;
real_ip_header CF-Connecting-IP;

#v4
set_real_ip_from 173.245.48.0/20;
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 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;

# V6
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;

This tells nginx that any time it sees one of these IP ranges, it should look at the header CF-Connecting-IP that gets sent and then use that as the connecting IP

Setting NGINX to use this

For argument’s sake, we will make the below assumptions

  • Location of the config file: /etc/nginx/cloudflare.conf
  • Location of the nginx config we want to fix: /etc/nginx/bookstack.conf

We need to edit the config of a site we want to resolve the IP issue to

nano /etc/nginx/bookstack.conf
vi /etc/nginx/bookstack.conf

Add the include statement in and point it to the full path of the file

server {

    listen       80;
    listen  [::]:80;

    root /var/www/documentation;
    index  index.html;
+   include /etc/nginx/cloudflare.conf;
}

Check the config is valid

nginx -t

you should see the below

nginx: the configuration file <> syntax is ok
nginx: the configuration file <> test is successful

Restart nginx

systemctl restart nginx

Want to make this site better? Open a PR or help fund hosting costs