`

Nginx+Lua+Redis 对请求进行限制

阅读更多

一、概述

需求:所有访问/myapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器(Tomcat)

实现思路:通过在Nginx上进行访问限制,通过Lua来灵活实现业务需求,而Redis用于存储黑名单列表。

相关nginx上lua或redis的使用方式可以参考我之前写的一篇文章:

openresty(nginx)、lua、drizzle调研 http://www.cnblogs.com/huligong1234/p/4007103.html

 

二、具体实现

1.lua代码

本例中限制规则包括(post请求,ip地址黑名单,请求参数中imsi,tel值和黑名单)

复制代码
 1 -- access_by_lua_file '/usr/local/lua_test/my_access_limit.lua';
 2 ngx.req.read_body()
 3 
 4 local redis = require "resty.redis"
 5 local red = redis.new()
 6 red.connect(red, '127.0.0.1', '6379')
 7 
 8 local myIP = ngx.req.get_headers()["X-Real-IP"]
 9 if myIP == nil then
10    myIP = ngx.req.get_headers()["x_forwarded_for"]
11 end
12 if myIP == nil then
13    myIP = ngx.var.remote_addr
14 end
15         
16 if ngx.re.match(ngx.var.uri,"^(/myapi/).*$") then
17     local method = ngx.var.request_method
18     if method == 'POST' then
19         local args = ngx.req.get_post_args()
20         
21         local hasIP = red:sismember('black.ip',myIP)
22         local hasIMSI = red:sismember('black.imsi',args.imsi)
23         local hasTEL = red:sismember('black.tel',args.tel)
24         if hasIP==1 or hasIMSI==1 or hasTEL==1 then
25             --ngx.say("This is 'Black List' request")
26             ngx.exit(ngx.HTTP_FORBIDDEN)
27         end
28     else
29         --ngx.say("This is 'GET' request")
30         ngx.exit(ngx.HTTP_FORBIDDEN)
31     end
32 end
复制代码

 

2.nginx.conf

location / {
root html;
index index.html index.htm;

access_by_lua_file /usr/local/lua_test/my_access_limit.lua;

proxy_pass http://127.0.0.1:8080;
client_max_body_size 1m;
}

 

3.添加黑名单规则数据

#redis-cli sadd black.ip '153.34.118.50'
#redis-cli sadd black.imsi '460123456789' 
#redis-cli sadd black.tel '15888888888'

 

可以通过redis-cli smembers black.imsi 查看列表明细

 

4.验证结果

#curl -d "imsi=460123456789&tel=15800000000" "http://www.mysite.com/myapi/abc"

分享到:
评论

相关推荐

    nginx+lua+redis 集群 连接插件和脚本

    在这个“nginx+lua+redis集群”解决方案中,提供的连接插件可能是指Nginx与Redis之间的通信模块,例如lua-redis-pconnector,这个插件允许Nginx通过Lua脚本直接与Redis进行交互。而脚本部分可能包括了处理业务逻辑、...

    nginx+lua+redis实现token验证

    例如,我们可以编写一个`lua`脚本来从请求头中提取`token`,然后使用`redis`进行验证。`lua`连接`redis`的库,如`lua-resty-redis`,可以帮助我们与`redis`进行通信,查询或设置键值。 以下是`lua`连接`redis`的一...

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    nginx+lua+redis通过匹配客户端ip进行灰度发布 本文将讲述如何使用nginx、lua和redis来实现灰度发布,通过匹配客户端IP来实现灰度发布。灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,...

    linux 实现nginx+Lua 访问redis集群

    最近有个需求是需要用nginx播放服务器的视频,考虑安全问题,需要在nginx加个lua去取redis的token进行验证,刚开始访问测试环境单机还挺好用,可是要访问生产的是集群环境,找了多了资料趟了数不尽的坑,最终形成这...

    Nginx+Lua+Redis+Json

    "Nginx、Lua、Redis 和 Json 的结合应用" Nginx 是一个高性能的 ...本文介绍了如何使用 Nginx、Lua、Redis 和 Json 来构建一个高效的系统,能够处理高并发的请求,并提供了丰富的功能和模块来满足大多数的应用场景。

    nginx+lua+redis黑名单加载

    综上所述,"nginx+lua+redis黑名单加载"是一种有效的网络安全策略,通过利用`nginx`的高性能和`lua`的灵活性,结合`redis`的快速存取能力,能够实时阻止黑名单中的IP进行访问,保护服务器资源和用户数据的安全。...

    nginx+lua+redis.rar

    例如,当用户登录时,Nginx接收到请求,Lua验证用户凭证并从Redis获取或更新会话信息,整个过程无需涉及后端应用服务器,极大地提高了处理效率。 总结来说,Nginx、Lua与Redis的整合应用为构建高性能、可扩展的Web...

    nginx+lua+php+redis实现单业务排队系统架构.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    Nginx+Lua+Redis构建高并发Web应用

    在构建高性能Web应用程序时,Nginx、Lua和Redis的组合提供了一种高效且灵活的解决方案。这种架构允许处理高并发请求,同时减轻服务器压力,提高响应速度。下面将详细介绍如何利用这三种技术来构建这样的系统。 首先...

    高并发Nginx+lua是如何抗住的

    提到高并发或者抗压力,有这种高qps经验的同学第一反应大都是Nginx+lua+Redis,网上也满天非那种高并发架构方案大都是这种,但是Nginx+lua来做接入层到底是怎么抗住压力的呢?本篇顺序:1、Nginx如何抗住的高并发,...

    2 OpenResty+Lua+Redis 高性能后端接口.docx

    2. 如果 Nginx 缓存中没有广告数据,则通过 Lua 脚本查询 Redis,如果 Redis 中有数据,则将数据存入到 Nginx 的缓存并返回查询到广告数据。 3. 如果 Redis 中没有缓存数据,则此时会通过 Lua 脚本查询 MySQL,如果 ...

    跟我学Nginx+Lua开发

    我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程 序...

    京东李开涛 跟我学Nginx+Lua 开发

    传统的Web服务器在处理大规模并发请求时往往力不逮心,而Nginx作为一款轻量级、高性能的HTTP服务器,结合Lua脚本语言的强大功能,能够有效提升Web应用的并发处理能力。 - **实践意义**:京东大神李开涛基于Nginx+...

    跟我学Nginx + Lua开发

    Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,在网络软件开发领域得到...随着对相关技术和平台的理解不断深入,开发者将会更加熟练地运用Nginx和Lua进行Web开发,提高开发效率和应用性能。

    Nginx利用Lua+Redis实现动态封禁IP的方法

    本文给大家介绍的是Nginx利用Lua+Redis实现动态封禁IP的方法,下面话不多说了,来一起看看详细的介绍吧 二、架构 实现 IP 黑名单的功能有很多途径: 1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求; 2...

    跟我学Nginx+Lua开发.pdf

    《跟我学Nginx+Lua开发》是一本针对Nginx与Lua结合使用的教程书籍,旨在帮助读者理解如何利用这两种技术进行高效且灵活的Web应用开发。Nginx作为一款广泛使用的高性能HTTP服务器和反向代理服务器,在处理高并发连接...

    京东商品详情页Nginx+Lua的大规模应用.pdf

    - 线上压测/功能验证:使用Nginx+Lua进行线上环境的性能测试和功能验证。 六、优化实践案例 在实际应用中,京东通过Nginx+Lua的技术组合实现了多种优化: - 使用Unix Domain Socket套接字,减少了本机TCP连接数,...

Global site tag (gtag.js) - Google Analytics