Внесение IP-адресов в белый список в блокировке страны файла виртуального хоста Nginx

В Nginx я проверяю, приходит ли IP из заблокированной страны. Если это так, то посетитель получает 403. Мне нужна возможность добавлять IP-адреса из белого списка, чтобы позволить им войти, даже если они являются частью заблокированных стран.

Я бы предпочел внести IP-адреса в белый список в расположении nginx.conf, поэтому мне не нужно обновлять 30+ файлов виртуальных хостов. Как я могу это сделать?

В каждом из файлов виртуального хоста nginx в / etc / nginx / sites-enabled

location / {
    if ($allowed_country = no) {
      return 403;
    }

    try_files $uri $uri/ /index.php$is_args$args;
}

Список стран создается в /etc/nginx/nginx.conf

## GEOIP settings
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
      default yes;
      RU no;
      BR no;
      UA no;
      PH no;
      IN no;
      CN no;
    }

person ComputerGiant    schedule 23.05.2016    source источник


Ответы (1)


Чтобы иметь фильтр по стране и IP-адресу, вам необходим модуль geo Результат в чем-то вроде:

location / {
   if ($allowed_country = no) {
     return 403;
   }

   if ($allowed_ip = no) {
      return 403;
   }

   try_files $uri $uri/ /index.php$is_args$args;
}

Плюс отображение в nginx.conf

geo $allowed_ip {
    default        no;

    127.0.0.1      yes;
    192.168.1.0/24 yas;
}

Это должно быть возможно, но директива map должна находиться в контексте http.

Я бы посоветовал включить в каждый виртуальный хост, отдельный файл, чтобы быть более гибким.

person Ben    schedule 23.05.2016
comment
Привет, Бен! Этот geoip уже находится в отдельном файле (GeoIP.dat), и блокировка страны работает правильно. Включаемый файл уже является частью файла nginx.conf. Я ищу способ добавить IP-адреса из белого списка к этой функции, но я не знаю синтаксиса для его включения либо в функцию map $ geoip_country_code $ allowed_country в файле nginx.conf, либо в каждом файле виртуального хоста. Вот с чем мне нужна помощь. Спасибо! - person ComputerGiant; 23.05.2016
comment
Понятно, тогда я неправильно понял вопрос. Это можно сделать с помощью модуля geo. Я обновлю свой ответ - person Ben; 23.05.2016
comment
Привет, Бен, когда я реализую это или подобное решение, я получаю 403 со всех IP-адресов. Похоже, что geo $ allowed_ip по умолчанию запрещает все IP-адреса. Есть ли способ не установить значение по умолчанию = no и установить if ($ allowed_ip = yes) {попробуйте файлы ... - person ComputerGiant; 24.05.2016
comment
Вы можете пропустить значение по умолчанию и переопределить allowed_country geo $allowed_country { 127.0.0.1 yes; 192.168.1.0/24 yes; } - person Ben; 24.05.2016