Nginx + GeoIP: блокировка пользователей из определенных стран

Использование модуля GeoIP для Nginx который позволяет блокировать пользователей из разных стран

Для ограничения доступа к сайту пользователей из определенных стран с помощью web-сервера Nginx, можно использовать модуль GeoIP.

Устанавливаем необходимые пакеты в системе:

Debian/Ubuntu

sudo apt-get install nginx-module-geoip

CentOS

yum install nginx-module-geoip

Обновим базу GeoIP до актуальной версии:

# 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 -V убедимся, что наш web-сервер собран с параметром --with-http_geoip_module. Если нет — приступаем к самостоятельной сборке модулей Nginx

В каталоге с конфигурационными файлами web-сервера Nginx создадим файл block.map.include следующего содержания:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
        default yes;
        CN no;
        VN no;
        TW no;
}

В данном примере мы запрещаем доступ к сайту пользователям из Китая, Вьетнама и Тайваня.

Для того, чтобы разрешить использование сайта только пользователям определенных стран, отредактируем конфигурационный файл следующим образом:

geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default no;
        RU yes;
        UA yes;
 
    }

Теперь сайт будет доступен только пользователям из России и Украины.

В конфигурационном файле /etc/nginx/nginx.conf в секции http добавляем следующую строку:

        include include/block.map.include;

После чего в настройках хоста (секция server) вставляем следующую конструкцию:

        if ($allowed_country = no) {
            return 404;
        }

Применяем изменения:

# nginx -s reload
Обновлено:
10.09.2018, 10:19
Предыдущая статья
MySQL
Следующая статья
Node.JS v.10
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам