Перейти к содержанию

geoip2: Модуль GeoIP2 для NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив, основанный на RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-geoip2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-geoip2

Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_geoip2_module.so;
load_module modules/ngx_stream_geoip2_module.so;

Этот документ описывает nginx-module-geoip2 v3.4, выпущенный 22 июня 2022 года.


ngx_http_geoip2_module - создает переменные со значениями из баз данных maxmind geoip2 на основе IP-адреса клиента (по умолчанию) или из конкретной переменной (поддерживает как IPv4, так и IPv6).

Модуль теперь поддерживает потоки nginx и может использоваться так же, как и http модуль.

Загрузка базы данных Maxmind GeoLite2 (по желанию)

Бесплатные базы данных GeoLite2 доступны на сайте Maxmind (требуется регистрация).

Пример использования:

http {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        auto_reload 5m;
        $geoip2_metadata_country_build metadata build_epoch;
        $geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
        $geoip2_data_country_name country names en;
    }

    geoip2 /etc/maxmind-city.mmdb {
        $geoip2_data_city_name default=London city names en;
    }
    ....

    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;
    ....
}

stream {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        $geoip2_data_country_code default=US source=$remote_addr country iso_code;
    }
    ...
}
Метаданные:

Получите метаданные о базе данных geoip.

$variable_name metadata <field>
Доступные поля: - build_epoch: временная метка сборки базы данных maxmind. - last_check: последнее время, когда база данных проверялась на изменения (при использовании auto_reload). - last_change: последнее время, когда база данных была перезагружена (при использовании auto_reload).

Автоматическая перезагрузка (по умолчанию: отключена):

Включение автоматической перезагрузки заставит nginx проверять время изменения базы данных через указанный интервал и перезагружать ее, если она изменилась.

auto_reload <interval>

GeoIP:

$variable_name [default=<value] [source=$variable_with_ip] path ...
Если значение по умолчанию не указано, переменная будет пустой, если не найдена.

Если источник не указан, будет использован $remote_addr для выполнения поиска.

Чтобы найти путь к необходимым данным (например: country names en), используйте инструмент mmdblookup:

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8

  {
    "country":
      {
        "geoname_id":
          6252001 <uint32>
        "iso_code":
          "US" <utf8_string>
        "names":
          {
            "de":
              "USA" <utf8_string>
            "en":
              "United States" <utf8_string>
          }
      }
  }

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8 country names en

  "United States" <utf8_string>

Это переводится как:

$country_name "default=United States" source=$remote_addr country names en
Дополнительные команды:

Эти команды работают так же, как и оригинальный ngx_http_geoip_module, описанный здесь: http://nginx.org/en/docs/http/ngx_http_geoip_module.html#geoip_proxy.

Однако, если вы укажете опцию source=$variable_with_ip для переменной, эти настройки будут игнорироваться для этой конкретной переменной.

geoip2_proxy < cidr >
Определяет доверенные адреса. Когда запрос поступает с доверенного адреса, будет использован адрес из поля заголовка запроса "X-Forwarded-For".

geoip2_proxy_recursive < on | off >
Если рекурсивный поиск отключен, то вместо оригинального клиентского адреса, который соответствует одному из доверенных адресов, будет использован последний адрес, отправленный в "X-Forwarded-For". Если рекурсивный поиск включен, то вместо оригинального клиентского адреса, который соответствует одному из доверенных адресов, будет использован последний недоверенный адрес, отправленный в "X-Forwarded-For".

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-geoip2.