26 Jul 2018
geo是一个ip库,nginx可以用来过滤ip, 默认情况下,nginx就编译上了geo库,除非编译时手动增加--without-http_geo_moudle。
访问www.abc.com?testip=1.2.3.4,根据testip参数,来使用geo匹配ip白名单,如果不在白名单内,返回403。
http {
...
geo $arg_testip $geo {
default 0;
1.2.3.4 1;
192.168.0.0/24 1;
include vhost/geoip_cn;
}
...
server {
...
location / {
......
if ($geo = 0) {
return 403;
}
......
}
}
}
若使用
geo $geo {},默认使用的是$remote_addr, 详细文档。 当然我们可以手动传入替换的变量,例如此处我们使用的是$arg_testip,也就是testip参数。
default 0的含义是,如果在此列表中没有匹配的ip或者ip段,则默认给geo变量赋值为0。
geoip_cn文件内容示例
103.101.60.0/22 1; 103.101.120.0/21 1; 103.101.144.0/21 1; 103.101.153.0/24 1; 103.101.180.0/22 1; 103.101.184.0/22 1; 103.102.76.0/22 1; 103.102.80.0/22 1; 103.102.168.0/21 1; 103.102.180.0/22 1;
查询地区网址段的网址: