原文:https://segmentfault.com/a/11…
为了封禁某些爬虫或者歹意用户对服务器的申请,咱们须要建设一个动静的 IP 黑名单。对于黑名单之内的 IP,回绝提供服务。
实现 IP 黑名单的性能有很多路径:
1、在操作系统层面,配置 iptables,回绝指定 IP 的网络申请;
2、在 Web Server 层面,通过 Nginx 本身的 deny 选项 或者 lua 插件 配置 IP 黑名单;
3、在利用层面,在申请服务之前查看一遍客户端 IP 是否在黑名单。
为了方便管理和共享,咱们抉择通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的性能,架构图如下:
1、装置 Nginx+Lua 模块
举荐应用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器:
2、装置并启动 Redis 服务器
3、配置 Nginx 示例:
Nginx 配置,其中
lua_shared_dict ip_blacklist 1m
由 Nginx 过程调配一块 1M 大小的共享内存空间,用来缓存 IP 黑名单。
access_by_lua_file lua/ip_blacklist.lua;
指定 lua 脚本地位。
4、配置 lua 脚本,定期从 Redis 获取最新的 IP 黑名单。
5、在 Redis 服务器上新建 Set 类型的数据 ip_blacklist,并退出最新的 IP 黑名单。
实现以上步骤后,从新加载 nginx,配置便开始失效了。这时拜访服务器,如果你的 IP 地址在黑名单内的话,将呈现回绝拜访,如下图:
以上,便是 Nginx+Lua+Redis 实现的 IP 黑名单性能,具备如下长处:
1、配置简略、轻量,简直对服务器性能不产生影响;
2、多台服务器能够通过 Redis 实例共享黑名单;
3、动静配置,能够手工或者通过某种自动化的形式设置 Redis 中的黑名单。
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 别在再满屏的 if/ else 了,试试策略模式,真香!!
3. 卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!