Как работает сервис
В этом материале речь пойдет о простом и эффективном способе определения геопозиции пользователя по его 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 запросов в месяц.
Учитывая простоту интеграции и все бенефиты, считаю сервис весьма удобным для проектов, которые имеют соответствующие требования.