在Nginx中,我正在检查IP是否来自被阻止的国家/地区。如果是,则访问者获得403.我需要能够添加列入白名单的IP以允许他们进入,即使他们是被阻止国家的一部分。
我更愿意在nginx.conf位置将IP列入白名单,因此我不需要更新30多个虚拟主机文件。我怎样才能做到这一点?
在/ etc / nginx / sites-enabled
中的每个nginx虚拟主机文件中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;
}
答案 0 :(得分:1)
要在geoip国家/地区和IP地址上设置过滤器,您需要geo module导致以下内容:
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上下文中。
我建议在每个vhost中都有一个include,将geoip设置放在一个单独的文件中,以便更灵活。