Иногда встает задача заблокировать доступ к сайту для пользователей из нежелательных стран, например из Пакистана и Китая.
Как это сделать на примере 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
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.