CloudFlare y su REMOTE ADDRESS

Cuando se habilita un CDN suelen pasar este tipo de cosas, la IP del visitante ya no es del visitante, la del FORWARD ya no es del FORDWARD y la remota ya no sabes si es remota o si se ha pasado por la sesión vermouth y se ha convertido en lugareña.

Y la fiesta se vuelve todavía más loca cuando aparece de improvisto un servidor intermedio que hace de proxy transparente entre el CDN y el anfitrión de contenido dinámico. ¡Coca Cola para todos y algo de comer!.

Buscando por el wiki de CloudFlare me encuentro con una "fantástica" solución que aportan directamente desde el servicio. Ojo, entrecomillo "fantástica" porque a bote pronto me ha sacado el apuro, y al ser viernes tampoco me apetece demasiado pensar en otro tipo de consecuencias.

Os presento a mi amiga HTTP_CF_CONNECTING_IP, una nueva cabecera que llega al servidor para que nuestros colegas los programadores no se estrujen demasiado la esponja intentando guardar la verdadera IP de nuestro visitante (warning, ejemplo en PHP):

function ip_real()
{
  if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  else
      $ip=$_SERVER['REMOTE_ADDR'];
  // Sólo para amigüitos de CloudFlare
  if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
      $ip=$_SERVER['HTTP_CF_CONNECTING_IP'];
  return $ip;
}

Si es que no hay nada como un maromo de 2 metros y bíceps de 60 cm para que la fiesta no se descontrole y poner a cada uno en su sitio. Y con este nuevo y fantástico tip les insto a que tengan todos un grandioso fin de semana.

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.