Как работает сервис

В этом материале речь пойдет о простом и эффективном способе определения геопозиции пользователя по его ip-адресу.

Поисковые системы и IT-гиганты используют собственные, возможно более точные и зрелые решения, но я лишь показываю вариант реализации на примере моего сайта.

Надеюсь кому-то это окажется полезным для использования в своих проектах.

Определение ip пользователя

Определение пользовательского ip-адреса выполняется на основе анализа заголовков запроса.

Я использую Node.js-пакет «request-ip»

Определение пользовательского IP-адреса выполняется в соответствии с приоритетами:

  • X-Client-IP
  • X-Forwarded-For
    Заголовок может содержать несколько IP-адресов в формате: «IP клиента, IP прокси-сервера 1, 2, 3» – библиотека использует только первый
  • CF-Connecting-IP
    Cloudflare
  • Fastly-Client-Ip
    Данный заголовок используют Fastly CDN и хостинг Firebase при пересылке в облачные сервисы
  • True-Client-Ip
    Akamai, Cloudflare
  • X-Real-IP
    Nginx proxy/FastCGI
  • X-Cluster-Client-IP
    Rackspace LB, Riverbed Stingray
  • X-Forwarded, Forwarded-For, Forwarded
    Альтернативные варианты заголовка «X-Forwarded-For»
  • appengine-user-ip
    Google App Engine
  • req.connection.remoteAddress
  • req.socket.remoteAddress
  • req.connection.socket.remoteAddress
  • req.info.remoteAddress
  • Cf-Pseudo-IPv4
    Cloudflare fallback
  • request.raw
    Fastify

Библиотека проста в использовании, легковесна, достаточно популярна и рекомендована для geoip-сервисов.

Определение геопозиции по ip-адресу

Для определения координат и получения дополнительной информации используется REST API сервиса «IpWhois», который предоставляет выгрузку данных по заданному ip-адресу.

🚀 Быстро и стабильно

Высокая скорость ответа достигается за счет использования GeoDNS.

🧠 Всегда актуальные данные

Без лишней головной боли: база данных обновляется в режиме реального времени при помощи нейронной сети.

🚩 Мультиязычность

Релевантные данные о часовом поясе, местной валюте и текущем курсе с поддержкой мультиязычности.

🤩 Есть FreeШка

Имеется возможность бесплатного тестирования и использования сервиса в некоммерческих проектах с ограничением до 10 000 запросов в месяц.

Учитывая простоту интеграции и все бенефиты, считаю сервис весьма удобным для проектов, которые имеют соответствующие требования.