IPinfoBox

IP real do visitante atrás da Cloudflare ou do balanceador

Como um servidor atrás de um proxy pode obter com segurança o IP real do visitante, com Nginx, Node.js e PHP.

Por que o IP aparece diferente

Quando a Cloudflare, um balanceador de carga ou o Nginx fica na frente do seu site, as conexões que o seu servidor recebe vêm desse proxy, então você vê o IP do proxy em vez do IP do visitante. O IP do visitante está em um cabeçalho que o proxy adiciona.

Cloudflare

A Cloudflare coloca um único IP de visitante no cabeçalho CF-Connecting-IP. Para ter certeza de que a requisição veio mesmo da Cloudflare, confie nesse cabeçalho apenas quando o IP de conexão estiver nas faixas de IP publicadas pela Cloudflare (cloudflare.com/ips).

X-Forwarded-For

Quando a requisição passa por vários proxies, o X-Forwarded-For acumula os IPs deles separados por vírgulas. O primeiro valor é tido como o visitante, mas o próprio visitante pode escrevê-lo, então conte de trás para frente a partir do valor que o seu proxy adicionou por último e use o valor de uma posição em que você pode confiar.

Nginx

Com o módulo real_ip, liste as faixas dos seus proxies em set_real_ip_from e defina real_ip_header como CF-Connecting-IP ou X-Forwarded-For. A partir daí, seus logs e sua aplicação recebem o IP do visitante.

Node.js e PHP

No Express, defina app.set("trust proxy", número de proxies) e req.ip passa a ser o IP do visitante. No PHP, use $_SERVER["HTTP_CF_CONNECTING_IP"] apenas quando $_SERVER["REMOTE_ADDR"] for o seu próprio proxy.

Confira

Depois de configurar, se o IP que o seu site registra for igual ao IP mostrado na página inicial do IPinfoBox, está funcionando.

Veja agora o seu IP e a sua localização.

Verificar meu IP