最近看到群里有人问自己的业务被境外IP给撸了,能不能直接拦截境外的IP,只允许境内访问,刚好有群友说了句可以用GeoIP2,于是我就实践了一下,确实可以!
环境
1、CentOS7.9
2、Nginx1.22
3、GeoIP2模块
4、MaxMind国家IP库
5、libmaxminddb工具(用于解析MaxMind国家IP库文件)
官方下载链接:
CentOS7.9:http://isoredirect.centos.org/centos/7/isos/x86_64/
Nginx:https://nginx.org/download/nginx-1.22.1.tar.gz
GeoIP2模块:https://github.com/leev/ngx_http_geoip2_module/releases
MaxMind国家IP库: https://www.maxmind.com/en/home
libmaxminddb工具:https://github.com/maxmind/libmaxminddb/releases
一、编译安装libmaxminddb
1 | 这里下的是1.7.1版本 |
二、解压GeoIP2
1 | 因为使用的是Nginx1.22的版本,所以GeoIP2只能用3.3版本的,不然会报错 |
三、编译安装Nginx
1 | tar -zxvf nginx-1.22.1.tar.gz |
四、注册MaxMind帐号并下载国家IP数据库
五、将下载的数据库解压并放到指定位置
这个位置并不一定说是要在哪里,只要到时候你Nginx调用的时候路径是对的就行
1 | mkdir -p /usr/local/nginx/IPData/ |
六、配置Nginx实现禁止境外IP访问、防盗链、防爬虫、限制访问速度、限制连接数
1 | mkdir -p /usr/local/nginx/conf/v_host/ |
1 |
|
1 | vim /usr/local/nginx/conf/v_host/website.conf |
1 | #HTTP配置 |
七、测试是否生效可用
使用境外IP访问测试
使用境内IP访问测试