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>
Автоматическая перезагрузка (по умолчанию: отключена):
Включение автоматической перезагрузки заставит 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 >
geoip2_proxy_recursive < on | off >
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-geoip2.