1

在 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;
    }
4

1 回答 1

2

要对 geoip 国家和 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 上下文中。

我建议在每个 vhost 中包含一个包含,将 geoip 设置放在一个单独的文件中,以更加灵活。

于 2016-05-23T12:06:26.093 回答