Cómo montar una consulta IP-país rápida en tu stack
Guía práctica para añadir detección de país a una aplicación web: dónde invocarla, cómo cachearla y cómo evitar que acabe en la ruta crítica.
# Cómo montar una consulta IP-país rápida en tu stack
La detección de país debería añadir apenas unos pocos milisegundos a cada petición. La clave está en diseñarla para que siga siendo así.
Primero, identifica bien la IP del cliente
Cuando hay un proxy o una CDN por delante, la dirección del socket suele ser la de tu propio edge. Lee la cabecera que realmente establece tu infraestructura y confía en ella solo si viene de tu propia red:
- Cloudflare:
CF-Connecting-IP - La mayoría de balanceadores: la primera entrada no confiable por la izquierda en
X-Forwarded-For - Conexión directa: la dirección del peer del socket
Parsear X-Forwarded-For a ciegas abre la puerta al spoofing, porque un cliente puede añadir al principio cualquier valor que quiera.
Haz la consulta una vez por sesión, no en cada petición
Resuelve la ubicación al crear la sesión, guarda el país y la clasificación en la propia sesión o en una cookie firmada, y reutiliza ese dato. Vuelve a resolver solo cuando cambie la IP. Así conviertes miles de consultas en una sola.
Usa caché con un TTL razonable
La geolocalización de un /24 concreto suele mantenerse estable durante horas. Una caché en memoria de una hora, indexada por IP, elimina la mayor parte del tráfico repetido. Cachea también los resultados negativos, aunque con un TTL más corto, para que una caída no se convierta en una tormenta de consultas.
No bloquees nunca el renderizado por esto
Define un timeout estricto de unos cientos de milisegundos y una alternativa clara:
ts const geo = await Promise.race([ lookup(ip), timeout(300).then(() => null), ]); const country = geo?.country ?? defaultCountry;
Que una página se renderice con una divisa incorrecta puede ser una molestia menor. Que no se renderice en absoluto es facturación perdida.
Llévalo al edge siempre que puedas
Si tu aplicación se ejecuta en un entorno edge, la consulta se realiza geográficamente cerca del usuario y la latencia añadida es prácticamente despreciable. Resuelve ahí, adjunta el resultado al contexto de la petición y deja que la aplicación lo lea como un dato más.
Quédate con la decisión, descarta el dato bruto
Almacena el resultado que importa al negocio —la divisa mostrada, la regla aplicada— en lugar del registro de ubicación completo. Es más barato, más fácil de justificar ante una revisión de privacidad y, en la práctica, es lo único que vas a consultar después.
