关于java:实现动态封禁-IP干死爬虫

46次阅读

共计 894 个字符,预计需要花费 3 分钟才能阅读完成。

原文: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 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0