Как на nginx блокировать посетителей по странам и городам с помощью GeoIP

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 на перечитывание конфигурации.


			

admin has written 72 articles

Leave a Reply