Search code examples
javascriptnode.jsnginxcloudflare

Get client IP address of a request instead of Cloudflare's IP address


Cloudflare changes the IP addresses of incomming requests because Cloudflare is a middleware between my website and the Internet, a proxy.

How should I get the initial IP address of the request, not Cloudflare its IP address. I heard about the mod_cloudflare but does this plugin only updates the IP address in my logs (?) And I didn't find a version for Nginx.


Solution

  • Cloudflare sets the CF-Connecting-IP and the X-Forwarded-For headers on every request

    You can simply get the IP from their special header:

    let ip = req.headers['cf-connecting-ip']
    

    If you expect requests outside of Cloudflare, you can get these IPs the following way:

    let otherIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress
    

    Though, be wary, that other Proxies (like Nginx) will also set the x-forwarded-for header.