使用Nginx Geoip2 可以处理不同国家 (或城市) 的访问,下面简述一下安装步骤及配置方法

1. 安装依赖

libmaxminddb 源码地址:https://github.com/maxmind/libmaxminddb
其网站中有具体安装步骤,这里不做说明

2. 下载GeoIP2 数据

地址1:https://dev.maxmind.com/geoip/geoip2/geolite2/
地址2:https://github.com/Hackl0us/GeoIP2-CN

3. 将GeoIP2 模块编译到Nginx

地址:https://github.com/leev/ngx_http_geoip2_module
将其构建为静态模块:

./configure --add-module=/path/to/ngx_http_geoip2_module

更多构建说明,请看其网站文档

4. 配置GeoIP2

  1. 在nginx配置的http部分添加以下代码启用geoip2

    http{
        ...
        #GeoLite2-Country.mmdb文件路径请根据实际情况调整
        geoip2 /usr/local/nginx/GeoIP/GeoLite2-Country.mmdb {
              $geoip2_data_country_code country iso_code;
        }
        #允许本地网段访问
        geo $allow-ip{
            default no;
            192.168.10.0/24
        }
        #配置地区访问
        map $geoip2_data_country_code $allowed_country {
            default no;
            CN yes;
        }
       ...
    }
  2. 在nginx配置中server部分启用上属所定义的配置限制要求,和执行的操作
    此配置在location前面,也可以配置在localtion 里面,经测试如自定义403 404异常返回页面,将放置到localtion 里面自定义页面才可生效;

    server {
    ...
    location / {
         #本地网段白名单
         if ($allow-ip = yes ) {
               set $allowed_country yes;
         }
         #国家地区白名单
         if ($allowed_country = no) {
                return 403;
         }
         #指定国家跳转到指定域名
         if ($geoip2_data_country_code = CN) {
             return 301 https://www.domain.cn$request_uri;
         }
      }
    ...
    }

配置到此结束

Last modification:December 22, 2022
如果觉得我的文章对你有用,请随意赞赏