условный доступ / access control

Anatoly Pugachev matorola на gmail.com
Вт Июн 16 09:14:22 UTC 2020


Здравствуйте!

Есть обычный nginx (не plus).

Добавил к нему geoip модуль, все работает. Теперь хочу сделать доступ
на основе geoip и обычных IP списков доступа.

По отдельности geoip и IP acl работают, как сделать чтобы работало вместе?

Логика нужна такая:

- если ip_whitelist, то дальше по конфигурационному файлу
- если ip_blacklist , то return 403
- (тут geoip) если $allowed_country == no, то return 403

если убрать первые два пункта, то получается такая конфигурация nginx
(относительно /etc/nginx/ ) :

nginx.conf :
       load_module modules/ngx_http_geoip_module.so;
       load_module modules/ngx_stream_geoip_module.so;

cat conf.d/site.conf

map $geoip_country_code $allowed_country {
default no;
RU yes;
}

server {
  server_name site.ru;
  if ($allowed_country = no) {
      return 403;
  }
}

и это работает, доступ только тем, для кого geoip вычислил что он из "RU" .

Есть ли возможность добавить еще проверку по IP как описано выше
(whitelist, blacklist, country) ?
Вероятно в теории это можно сделать через директиву(ы) map и условиями
if , но я никак пока не могу сообразить...


Спасибо.


Подробная информация о списке рассылки nginx-ru