Configuring IP geolocation
Overview
Cloudflare can include the country code of the visitor’s IP address (in ISO 3166-1 Alpha 2 format) with each request between Cloudflare and the upstream origin web server. This allows site administrators to capture their visitor’s IP location in server logging and/or application logic. Besides ISO country codes, Cloudflare uses the following special country codes:
XX
- Used for clients without country code data.T1
- Used for clients using the Tor network.
The country code value is passed along in the CF-IPCountry request header to the origin web server. This header is not visible to visitors in the site’s HTTP response.
Cloudflare includes country code information for both IPv4 and IPv6 addresses. Currently, the IPv4 information is more robust, but we expect the IPv6 data to improve rapidly.
Add IP geolocation information
The recommended procedure to enable IP geolocation information is to enable the Add visitor location headers Managed Transform. This Managed Transform adds HTTP request headers with location information for the visitor’s IP address, such as city, country, continent, longitude, and latitude.
Besides using the Managed Transform, you can also enable the IP Geolocation feature in the Cloudflare dashboard (Network app), which will only add a request header for the visitor’s country.
Capturing IP geolocation data in server logs
Visitor traffic geolocation information can be captured in origin server logging. Below are two very common web server implementations and how a site administrator could configure custom logging for the country of their visitors. If you are using a Managed Transform to add geolocation information to requests, you can follow the same strategy for logging other geolocation values, like city or continent.
Apache
LogFormat %{cf-ipcountry}i cloudflare_custom
More about Apache LogFormat
NGINX
log_format cloudflare_custom '"$http_cf_ipcountry"';
More about NGINX log_format
Capturing IP geolocation data in application logic
Web applications can also capture and use IP geolocation information in their logic. This is useful to direct visitors based on their country or provide defaults such as language and currency. Below are common language examples of how to capture this header into a variable for later use.
PHP
$country_code = $_SERVER["HTTP_CF_IPCOUNTRY"];
Python Flask
country_code = request.headers.get('cf-ipcountry')
Note that you’ll need to import python flask request module
NodeJS
const country_code = headers['cf-ipcountry'];
Note that you’ll need to require http/https and instantiate the createServer() method
C# (.NET)
string country_code = HttpContext.Current.Request.Headers.Get("cf-ipcountry");
Perl
$country_code = $ENV{"HTTP_CF_IPCOUNTRY"};
Troubleshooting
How to report a wrong IP location?
Cloudflare uses Maxmind as a geolocation database. Cloudflare updates its GeoIP database weekly.
You can use the Maxmind tool and make sure that Maxmind shows the correct Country Code. If the data is incorrect:
- Please submit correction requests through Maxmind here.
- Contact Cloudflare Support if Maxmind is showing the correct country code, but CF-IPCountry request header is incorrect.