Nginx: Блокируем доступ к сайту пользователям из нежелательных стран

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

Как это сделать на примере web-сервера nginx мы рассмотрим ниже.

Исходные данные: Debian 8.9 (jessie), nginx 1.13.5 (nginx установлен из официального репозитария)
Задача: Заблокировать доступ к сайту для Пакистана и Китая.

Ставим модуль geoip:

apt-get install nginx-module-geoip

Проверяем наличие базы GeoIP

ls -l /usr/share/GeoIP/GeoIP.dat

Если нет, то ставим:

apt-get install geoip-database libgeoip1

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

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.bak
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz && mv GeoIP.dat /usr/share/GeoIP/

Теперь настроим сам nginx, в файле /etc/nginx/nginx.conf пишем

load_module modules/ngx_http_geoip_module.so;
load_module modules/ngx_stream_geoip_module.so;

Далее в секции http пишем:

# Block country China and Pakistan
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country_mysite {
    default yes;
    CN no;
    PK no;
}

Далее в нужном vhost для location / ставим блок:

location / {
    if ($allowed_country_mysite = no) {
            return 403;
    }
    ...
}

Проверяем и перезагружаем конфигурацию nginx:

nginx -t
nginx -s reload

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


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о