Public IP not showing correctly?

Author
Jing Kim Author
|
4 days ago Asked
|
11 Views
|
2 Replies
0

Hey everyone,

I'm absolutely tearing my hair out trying to fix an issue with our "What is my IP Address" tool. For the past 48 hours, it's been completely unreliable, and I'm at my wit's end. This is a core utility for us, and I desperately need some seasoned advice.

  • The Core Problem: Our tool is frequently displaying incorrect or internal IP addresses instead of the user's actual public IP. Sometimes it shows the server's own IP, sometimes a local network IP, and sometimes it just gives inconsistent results for the same user refreshing the page.
  • Tool Setup: It's a simple PHP script running on a Nginx server. We're using Cloudflare as a CDN.
  • What I've Tried (and Failed At):
    • Checked Nginx configurations: Ensured real_ip_header CF-Connecting-IP; is correctly set.
    • Cloudflare settings: Confirmed "Always Use HTTPS" and other basic security settings are standard.
    • Server logs: The Nginx access logs are showing Cloudflare IPs, but the PHP script processing $_SERVER['REMOTE_ADDR'] or $_SERVER['HTTP_CF_CONNECTING_IP'] is still grabbing the wrong info sometimes.
    • Bypassed Cloudflare: Temporarily pointed DNS directly to the server, and the issue persists, though less frequently. This makes me suspect the server setup more than Cloudflare now.
    • PHP debugging: var_dump($_SERVER) shows HTTP_CF_CONNECTING_IP is often missing or incorrect when the problem occurs.
    • Different server blocks: Tested on a separate Nginx vhost with minimal config, same problem.
  • My Urgent Questions:
    • Could this be a deeper server-level issue beyond Nginx, perhaps with the OS (Ubuntu 22.04) or network stack?
    • Are there any specific Nginx modules or configurations I might be missing that correctly handle X-Forwarded-For or other IP headers from various proxies/CDNs?
    • Has anyone experienced intermittent issues with HTTP_CF_CONNECTING_IP not being passed correctly even when Cloudflare is active and properly configured?
    • Any obscure server settings or PHP functions I should be checking to reliably get the true client IP?

This is impacting our user trust significantly, and I need to resolve it ASAP. Any insights or suggestions would be incredibly helpful!

Thanks in advance!

2 Answers

0
MD Alamgir Hossain Nahid
Answered 2 days ago

I know exactly how frustrating it is to be at your wit's end trying to debug intermittent IP issues โ€“ been there with campaign tracking and it's a hair-pulling experience!

  • First, double-check for any *other* layers of reverse proxy or load balancing *before* your Nginx server. This could be an internal load balancer, a Docker network, Varnish, or even a firewall appliance. If Nginx is receiving traffic from another internal proxy, you might need to adjust your set_real_ip_from directives to include that internal proxy's IP range, and then ensure real_ip_recursive on; is active to correctly trace the original client IP through multiple hops. This is critical for proper reverse proxy configuration.
  • Your PHP script needs a robust method to retrieve the client IP, checking for various HTTP headers in a specific order. Always prioritize HTTP_CF_CONNECTING_IP (if Cloudflare is active), then fall back to HTTP_X_FORWARDED_FOR (checking for multiple IPs if comma-separated), and finally REMOTE_ADDR. A common approach for parsing these HTTP headers looks like this:
    
    function getClientIP() {
        $ip = '';
        if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
            $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
        } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]; // Get the first IP
        } elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : 'UNKNOWN';
    }
    
    This helps with reliable What is my IP Address functionality.
  • Intermittent `HTTP_CF_CONNECTING_IP` issues can sometimes stem from Cloudflare's own network routing (though rare) or caching layers. Ensure your Cloudflare firewall rules aren't inadvertently modifying or stripping headers for certain requests. Also, consider using a service like IPify or WhatIsMyIP.com's API as an external validation point for comparison.

Are you running any other services or containers on that Ubuntu 22.04 server that might be acting as an intermediary proxy?

0
Jing Kim
Answered 2 days ago

Thanks for the detailed breakdown. Regarding the robust PHP method for client IP retrieval, I'm already using similar logic that prioritizes `HTTP_CF_CONNECTING_IP`. The puzzling thing is, even when Cloudflare is actively proxying the traffic, that header is still often completely absent or holds an incorrect value, which wasn't what I'd expect if it was reliably present.

Your Answer

You must Log In to post an answer and earn reputation.