nginx: как блокировать посетителей по странам с помощью модуля GeoIP
5 (100%) 2 vote[s]

В этом руководстве объясняется, как использовать модуль GeoIP с nginx для блокировки посетителей по странам. Это стало возможным благодаря базе данных GeoIP, которая отображает IP-адреса пользователей по странам. nginx должен быть скомпилирован с HttpGeoipModule для использования базы данных GeoIP.

1 Предварительное примечание

Как упоминалось во введении, nginx должен быть скомпилирован с помощью HttpGeoipModule. Чтобы проверить, был ли ваш nginx скомпилирован с этим модулем, запустите:

Если вы увидите —with-http_geoip_module в выводе, вы готовы использовать базу данных GeoIP с nginx:

2 Установка базы данных GeoIP

В Debian / Ubuntu базу данных GeoIP можно установить следующим образом:

Эта команда помещает базу данных GeoIP в /usr/share/GeoIP/GeoIP.dat .

Возможно, эта немного устарела. Поэтому мы можем при желании загрузить свежую копию с веб-сайта GeoIP:

3 Настройка nginx

Откройте /etc/nginx/nginx.conf …

… и поместите в блок http {} перед строками включения :

Вход разрешен всем странам, кроме трех, для которых установлено значение no. Чтобы сделать  наоборот, т.е. заблокировать все страны и разрешить только несколько, вы должны сделать следующим образом:

На самом деле не блокирует ни одну страну, а просто устанавливает переменную $ allow_country . Чтобы фактически заблокировать страны, вы должны открыть конфигурацию vhost и поместить следующий код в контейнер сервера {} (это может идти как внутри, так и за пределами любого блока местоположения {} ):

Возвращает код ошибки 444 любому посетителю из заблокированной страны. Что происходит, закрывается соединение без отправки каких-либо заголовков. Вы также можете использовать другой код ошибки, например 403 («Запрещено»), если хотите.

Перезагрузите nginx для применения: