Nginx虚拟主机文件国家/地区阻止中的白名单IP

nfzehxib  于 2023-01-29  发布在  Nginx
关注(0)|答案(1)|浏览(145)

在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;
    }
62lalag4

62lalag41#

要在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中的Map

geo $allowed_ip {
    default        no;

    127.0.0.1      yes;
    192.168.1.0/24 yes;
}

这应该是可能的,但map指令必须在http上下文中。
我建议在每个vhost中都有一个include,在一个单独的文件中有geoip设置,这样会更灵活。

相关问题