Настройка географических ограничений на веб-ресурсе с учетом новых регионов Российской Федерации

fe2f481360f94591607acbc744f722c9

Актуальной задачей для веб-ресурса в нынешних реалиях является установка ограничений доступа по регионам, либо географическая привязка выдаваемой информации с учетом региона. Одним из решений, которые можно использовать для этих целей, является база данных и американский сервис MaxMind GeoIP2. Сервис привлекает огромным объемом и детальностью информации, но имеет свои особенности. Так, Крым, ДНР, ЛНР, Запорожская и Херсонская области, а также Севастополь указаны в базе как регионы Украины. Соответственно, если, скажем, разрешить доступ к ресурсу только с территории РФ, то эти регионы останутся не у дел.

Так я, первоначально настроив свой ресурс только на доступ с территории РФ, обнаружил, что мои друзья из Крыма и ДНР не могут получить доступ (получают специальную версию страницы, с ограниченным объемом информации). Проблема эта легко решается, и в этой статье я покажу, как именно можно простым спососбом ее решить, а также покажу действующий пример конфигурации сервера.

Мой пример основан на nginx и модуле ngx_http_geoip2_module, предназначенном для работы с базой MaxMind, под Ubuntu 20.04. Следует учесть, что в настоящее время актуальной является версия GeoIP2, имеющая новый формат БД. Пример приводится на основе бесплатной версии базы GeoLite2. Она содержит три таблицы. Первая, с данными IP, содержащими только информацию о стране (GeoLite2-Country), вторая — только о провайдере (GeoLite2-ASN), и третья содержит подробные данные по каждой местности (GeoLite2-City). Для фильтрации отдельных регионов нам нужна именно третья таблица.

Для получения базы GeoLite2 требуется учетная запись MaxMind. Ее можно завести тут: https://www.maxmind.com/en/geolite2/signup

Если из-за санкций не удается официально зарегистрироваться и получить базу, то это спокойно можно сделать из альтернативных источников. Главное, загрузить на сервер любым способом свежую версию файла GeoLite2-City.mmdb, и поместить его (для Ubuntu) в папку »/usr/share/GeoIP/».

Если зарегистрироваться удалось (например, имея двойное гражданство с другой страной, против которой санкции не введены

© Habrahabr.ru