условный доступ / 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