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