Настройка 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 в ручную читаем в этом топике.
Успехов.