Getting Real IP Addresses Using CloudFlare, Nginx, and Varnish

CloudFlare is a great service that proxies your site’s traffic in order to offer performance gains and filtering options. It can compress and cache static content such as CSS files, JavaScript, and image files and then geographically optimize how they’re given to your users (think CDN).

One annoying issue, however, is the fact that because it’s a proxy you see incoming requests as coming from CloudFlare servers rather than the original client. So if you’re doing any cool data analytics on your server your source IP information will be borked.

There’s an easy way to fix it, however.

I run Nginx as my main webserver, and Ubuntu’s version of the app includes support for the http-real-ip module, which allows you to specify a set of proxy server IPs and the original IP header within the forwarded traffic so you can map it properly.

A look at nginx.conf

So, using Nginx, edit your nginx.conf file and add the following to your http section: