使用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
在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; } ... }
在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; } } ... }