注:阅读本文需要有一定Linux知识的技术人员,写的不好,小白可能看不懂,十分抱歉哈。
1、系统环境
CentOS 7.x
Nginx 1.18.0 及Nginx1.20.0,其他版本未测试,以上两个版本均正常使用。
2.安装依赖
安装Geoip2依赖:
$ cd /data
$ wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz
$ tar -zxvf libmaxminddb-1.3.2.tar.gz
$ cd libmaxminddb-1.3.2
$ ./configure && make && make install
$ echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf
$ ldconfig
或者yum安装:yum install libmaxminddb-devel -y
3.下载Geoip2的nginx模块
wget https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz
下载对应nginx的编译包(可从nginx官网下载)
编译的时候,添加这段信息(注意后面是你的geoip2模块地址):
--add-module=/data/nginx/nginx-geoip2/ngx_http_geoip2_module
4.GeoIP2数据库下载
从官网注册账号:GeoLite2 Sign Up | MaxMind
之后下载GeoIP数据文件,放置到/usr/share/GeoIP/目录下或者其他目录亦可
5.nginx配置
注:/usr/share/GeoIP/GeoLite2-Country.mmdb 是GeoIP2数据库路径
限制某个国家用户访问:
http {
.........
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_data_country_code country iso_code;
}
map $geoip2_data_country_code $allowed_country {
default yes;
CN no;
}
.........
}
server {
.........
if ($allowed_country = no) {
return 403;
}
.........
}
限制某个城市用户访问:
http {
.........
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
$geoip2_data_city_code default=all city names en;
}
map $geoip2_data_city_code $allowed_city {
default yes;
Shanghai yes;
}
.........
}
server {
.........
if ($allowed_city = no) {
return 403;
}
.........
}