nginx geo黑名单
语法: geo [$address] $variable { … } 默认值: — 配置段: http 定义从指定的变量获取客户端的 IP 地址。默认情况下,nginx 从$remote_addr 变量取得客户端 IP 地址
在nginx 配置目录中创建geo.conf配置文件,内容如下
# 这注意理解 $bad 这个变量的数据 默认是从 $remote_addr 变量取得客户端 IP 地址 ,下面 没有特意写上需要从 哪个变量获取数据, 所以就是走得是默认的
geo $bad {
default 0;
include /opt/nginx/conf/vconf/ip_list.conf;
}
创建ip_list.conf , 这个文件中是你要禁止访问的IP地址,内容如下:
100.7.289.41 1;
100.8.210.0/24 1;
然后在nginx 主配置文件 nginx.conf 中引入geo.conf配置
include vconf/geo.conf;
在一个拦截策略配置 hook.conf 添加内容
if ($bad) {
return 404;
}
好了,现在在你需要启用IP黑名单拦截的,域名中引入 hook.conf 配置,如:
nginx -t 检查通过后 nginx reload
这样 s.test.com 域名就开启了对黑名单中IP的拦截
#---
IP黑名单(ip_list.conf) : 在里面添加禁止的IP,IP段 ,设置值为 1
geo配置 (geo.conf):引入IP黑名单(ip_list.conf) ,geo 中 default 为 0 (默认值为0 , ip黑名单中IP的值是 1)
拦截规则 (hook.conf):if ($bad) , if 语句,if 后直接跟变量名;如果变量值为空或者是以“0”开始的字符串,则条件为假;
因为黑名单中IP 的值是1 ,这里条件为真,返回return 404 ,这样就做到了nginx 黑名单功能
在nginx的使用建议,把通用的配置都单独抽里出来写成一个配置,需要的时候include引入。