Debian/Ubuntu
Проверяете, что nginx собран с модулем GeoIP. Команда:
nginx -V
должна показать вывод с подстрокой —with-http_geoip_module.
Далее необходимо установить библиотеку libgeoip1. В Debian/Ubuntu это делается командой:
apt-get install geoip-database libgeoip1
После этого, должна появится база данных GeoIP в usr/share/GeoIP/GeoIP.dat. Возможно, эта база будет устаревшей и в этом случае, можно получить её свежую копию с сайта:
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz
Далее конфигурируем nginx, откываем файл /etc/nginx/nginx.conf и добавляем в секцию http перед строками с include:
[...] geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; FK no; FM no; EH no; } [...]
Такая конфигурация разрешает все страны за исключением трёх: FK, FM, EH. Если вы хотите наоборот, блокировать все страны, кроме указанных, поменяйте строку «default yes;» на «default no;»
Это не всё. Здесь мы лишь устанавливаем значение нужное нам значение переменной $allowed_country.
Чтобы блокировка выполнялась, небходимо добавить показанный ниже блок либо в секцию server либо в нужный location:
[...] if ($allowed_country = no) { return 444; } [...]
Не забудьте дать команду nginx на перечитывание конфигурации.