实现IP黑名单的途径有很多,总结了以下三种:
1、在操作系统层面,配置 iptables,拒绝指定 IP 网络请求;
2、通过Nginx 自己的deny 选项 或者 lua 插件配置 IP 黑名单;
实现方法:
a. 在配置文件目录下:如/usr/local/nginx在/conf下创建黑名单文件ip_black.conf;
b. 列入黑名单的IP以deny的格式写入文件内容 IP;
deny xxxx.xxxx.xxx.xx
c. nginx在nginx的配置文件中.在conf中加入以下配置,可以放入http, server, location, limit_except句块需要注意相对路径
http{
include ip_black.conf;
}
3、在应用层面,请求服务前检查客户端 IP 是否列入黑名单。通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能
a. 安装 Nginx+Lua模块, 安装redis集群
b.在 Redis 上新建 Set 类型的数据 ip_blacklist,加入最新的 IP 黑名单
c. 编写luaj脚本
d.配置nginx,在配置文件中引用Lua脚本,每次请求后执行脚本
总结:
使用 Nginx+Lua + redis 的方式:
1、配置简单,重量轻,几乎不影响服务器性能;
2、多个服务器可以通过Redis实例共享黑名单;
3、动态配置可以手动或自动设置 Redis 黑名单。