Настройка Nginx + GeoIP CentOS

Настройка Nginx + GeoIP CentOS

Иногда требуется запретить доступ к сайту для пользователей из определенных стран, или даже городов. Например, во время DDoS-атак/http-флуда, или запретить трафик из некоторых стран (Китай, США, и.д.). Ниже представлен пример настройки связки Nginx и GeoIP.

Установка Nginx и GeoIP описана тут.

После установки всех компонентов пристуваем к настройке:

Сначала создаём в каталоге Nginx »/etc/nginx» файл good_countries и наполняем его:

nano /etc/nginx/good_countries

Т.к. в данном примере мы используем переменную $geoip_country_code, следовательно коды стран нужно указывать в виде двухбуквенных аббревиатур. Например, для России код будет выглядеть RU, соответственно для Украины код будет UA.

Пример:

RU 0;
UA 0;
US 0;

Ноль и точка с запятой обязательны. Содержимоеэтого файла берём отсюда, также полный список стран можно подсмотреть на сайте разработчиков GeoIP.

Теперь открываем главный конфигурационный файл Nginx:

nano /etc/nginx/nginx.conf

В секцию http добавляем:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $bad_country {
    default 1;
    include /etc/nginx/good_countries;
}

Мы подключили файл GeoIP.dat и определили переменную $bad_country, указав так же файл, good_countries в котором будем указывать страны, доступ из которых разрешен.

Далее, определяем какой домен нам нужно защитить, открываем его файл виртуального хоста, находим параметр location, и вставляем код проверки:

if ($bad_country){
              return 403;
}

После изменения параметров nginx, не забываем заставлять Nginx перечитывать файлы конфигурации.

/etc/init.d/nginx reload

Вот и все. Просто удалите «плохую» страну из файла good_countries или добавьте в него нужную страну, чтобы разрешить доступ.
Как обновлять файл GeoIP.dat в ручную читаем в этом топике.
Успехов.