资讯专栏INFORMATION COLUMN

Nginx 通过 Lua + Redis 实现动态封禁 IP

李增田 / 1759人阅读

摘要:背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的黑名单。对于黑名单之内的,拒绝提供服务。配置脚本,定期从获取最新的黑名单。在服务器上新建类型的数据,并加入最新的黑名单。

背景

为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 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 中的黑名单。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40343.html

相关文章

  • 基于 Nginx动态代理

    摘要:目前最常用的软件反向代理服务器有和。基于实现动态代理为了实现动态代理方案,需要在反向代理服务器中增加定制的功能。同时,由于反向代理服务器需要处理大量的代理请求,因此会频繁的读取反向代理配置数据。 基于 Nginx 的动态代理 作者:赵波日期:2016 年 8 月 4 日 在实际应用中,遇到了这样一个场景: 已有一个手机 APP 客户端,需要在该 APP 客户端中实现通过 Web 的形式...

    wean 评论0 收藏0
  • Nginx流量拦截算法

    摘要:自身有的请求限制模块流量限制模块基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,就能很好的限制请求数量,然而,问题还是在于无法热加载。漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。这也是对流量拦截的算法,针对做流量监测。 showImg(http://77l5jp.com1.z0.glb.clouddn.com/blog/logo-nginx-lua.png); 0x0...

    fuchenxuan 评论0 收藏0
  • Mac下使用ABTestingGateway快速搭建灰度网关

    摘要:下使用快速搭建灰度网关简介是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在层,基于和开发,使用作为分流策略数据库,可以实现动态调度功能。目前在京东如实时价格秒杀动态服务单品页列表页等都在使用架构,其他公司如淘宝去哪儿网等。 Mac下使用ABTestingGateway快速搭建灰度网关 ABTestingGateway简介 ABTestingGateway 是新浪开源的一个可以...

    2bdenny 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<