Nginx(OpenResty)+Lua+Redis IP限流 10s内

(四十五)OpenResty -- Nginx + Lua 访问 Redis 本文介绍如何使用 OpenResty(基于 Nginx + Lua)访问 Redis,包括 OpenResty 简介与安装(MacOS/Linux)、Nginx 请求处理阶段与 Lua 指令说明、获取客户端请求数据的方法,以及结合 Redis 的完整限流示例,展示 Lua 与 Nginx 集成访问 Redis 的实践。 阅读详情

使用 OpenResty 可以不用再次编译nginx 就能集成对应lua环境 可以扩展的模块比较丰富
1.使用redis 控制限流 ip 访问频度
创建对应lua脚本 access_by_limit_frequency.lua

local function close_redis(red)  
    if not red then  
        return
    end 
    --释放连接(连接池实现)  
    local pool_max_idle_time = 10000 --毫秒  
    local pool_size = 100 --连接池大小  
    local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)  
    if not ok then  
        ngx.say("set keepalive error : ", err)  
    end  
end

local function errlog(...)
    ngx.log(ngx.ERR, "redis: ", ...)
end

local redis = require "resty.redis"  --引入redis模块
local red = redis:new()  --创建一个对象,注意是用冒号调用的

--设置超时(毫秒)  
red:set_timeout(1000) 
--建立连接  
local ip = "127.0.0.1"  
local port = 6379
local ok, err = red:connect(ip, port)
if not ok then  
    close_redis(red)
    errlog("Cannot connect");
    return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)   
end  

local key = "limit:frequency:login:"..ngx.var.remote_addr

--得到此客户端IP的频次
local resp, err = red:get(key)
if not resp then  
    close_redis(red)
    return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) --redis 获取值失败
end 

if resp == ngx.null then   
    red:set(key, 1) -- 单位时间 第一次访问
    red:expire(key, 10) --10秒时间 过期
end  

if type(resp) == "string" then 
    if tonumber(resp) > 10 then -- 超过10次
        close_redis(red)
        return ngx.exit(ngx.HTTP_FORBIDDEN) --直接返回403
    end
end

--调用API设置key  
ok, err = red:incr(key)  
if not ok then  
    close_redis(red)
    return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) --redis 报错 
end  

close_redis(red)   

2.在 nginx.conf 中配置对应的 路径的使用情况处理

      location ^~/frequency/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # default_type 'text/plain';
        # charset 'utf-8';
        access_by_lua_file  D:\openresty-1.15.8.3-win64\lua\local\access_by_limit_frequency.lua;
        # content_by_lua '
        #     ngx.say(ngx.time() * 1000);
        #     ngx.exit(200)
        # ';   
        # content_by_lua_block {
        #     ngx.say("{\"error\":0, \"status\":0,\"msg\":\"ok\"}");
        #     ngx.exit(200);
        # }
       root D:/ds_wechat_files;
   }

以上是从其他地方找到的。大杂烩,如有侵权请联系我

3大核心模块+5步实战指南!Nginx如何打造10倍效率的动态封禁IP系统? 代码示例(传统iptables封禁): 痛点:核心价值:代码示例(Nginx配置): 效果:核心价值:代码示例(Redis操作): 效果:核心价值:代码示例(Lua脚本增强功能): 效果: Step 2:Nginx配置——集成Lua脚本 在中添加逻辑 配置Redis连接参数(IP、端口、密码) Step 3:Lua脚本开发——实现动态封禁逻辑 获取客户端IP(支持代理穿透) 查询Redis黑名单并响应403 支持限流、自动封禁等扩展功能 Step 4:Redis管理——维护黑名单与TTL 使用添加 阅读详情

相关推荐

Nginx限流进阶:用Lua脚本实现动态IP频率限制(OpenResty实战)

本文深入探讨了如何利用OpenResty的Lua脚本能力,在Nginx中实现动态IP访问频率限制。相比静态配置,该方案能根据系统实时负载动态调整限流阈值,并支持滑动窗口算法、分布式Redis存储及电商场景下的多级缓存策略,为构建灵活、智能的流量防护体系提供了实战指南。

weixin_29216049的博客 200

基于springboot+redis+nginx的IP封控策略实现

基于nginx+springboot+redis的IP封控策略实现

qq_46788415的博客 1250

Nginx+Lua限流实战:防止你的API被羊毛党刷爆

本文详细介绍了如何使用Nginx+Lua实现动态令牌桶限流技术,有效防止API被羊毛党刷爆。通过实战案例和优化策略,展示了如何在高并发场景下提升恶意请求拦截率至99.8%,同时保障正常用户体验。文章还涵盖了压力测试、参数调优及分布式环境下的限流方案对比。

weixin_30415113的博客 553

分布式--OpenResty+lua+Redis实现限流与防爬虫

上篇分布式--OpenResty+lua+Redis中,我们了解了nginx结合lua脚本的强大之处,lua结合反向代理,可以对http请求提前做一些处理,来保证业务服务器的安全性和单一职责原则,以及结合Redis提升读写缓存的效率与持久化能力 一、实现限流 DOS攻击是常见的攻击服务器的方式,限流可以做到防止暴力访问服务器,可以从流量方面进行限制,也可以从请求次数方面进行限制,下面为使用lua对...

aruba的博客 1447

高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

高并发的优化lua + openresty+redis (实现多级缓存)+限流(掌握)

当MATLAB遇见ROS2:一场跨平台实时仿真的技术融合与创新实践

本文探讨了MATLAB/Simulink与ROS2在跨平台实时仿真中的技术融合与创新实践。重点介绍了在Windows+WSL2异构环境下构建高可靠性联合仿真系统的架构设计、PX4仿真环境与DDS中间件的集成方法,以及MATLAB R2024b对ROS2深度集成的实战技巧,为复杂机器人系统的开发提供了高效解决方案。

rum55的博客 248

Redis+Lua脚本实现分布式限流(Nginx+Lua IP限流)

在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关注【冰河技术】微信公众号,解锁更多【高并发】专题文章。注意:由于原文篇幅比较长,所以被拆分为:理论、算法、实战(HTTP接口实战+分布式限流实战)三大部分。理论篇:《》算法篇:《》本文是在《》一文的基础上进行实现,有关项目的搭建可参见《》一文的内容。小伙伴们可以关注【冰河技术】微信公众号来阅读上述文章。

MayMatrix 的博客 3076

LLVM实战:如何用Clang+LLVM打造你的第一个C++编译器(附完整配置步骤)

本文详细介绍了如何使用Clang+LLVM构建C++编译器的完整配置步骤,从环境准备到编译流程剖析,再到调试与优化技巧。通过实战指南,帮助开发者深入理解LLVM编译器框架的工作原理,并掌握交叉编译与性能分析等高级功能。

sprite的博客 748

【Nginx】nginx+lua+redis实现限流

nginx、lua访问redis的三种方式: 基于nginx开源版本的一个。集成了大量的精良的lua库。所以接下来我们就使用OpenResty来实现相应的功能。

Passer_hua的博客 712

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 337

告别QXDM:在Android Studio中调试与验证高通NV读写功能的完整流程

本文详细介绍了在Android Studio中调试与验证高通NV分区读写功能的完整流程,替代传统的QXDM工具。通过JNI接口层、HAL服务层和Diag通信层的架构设计,开发者可以在熟悉的IDE环境中高效完成NV操作,包括环境配置、错误处理和性能优化等关键实践。

weixin_27013291的博客 262

OpenResty(Nginx+Redis+Lua)实现缓存限流

OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统。

qq_43409401的博客 3287

同态加密与SEAL库实战:CKKS参数调优避坑指南

本文深入探讨了同态加密技术中CKKS方案的参数调优实践,重点解析了SEAL库中`poly_modulus_degree`、`coeff_modulus`和`scale`三大核心参数的配置技巧与避坑指南。通过实战案例展示了如何平衡计算深度、精度与性能,为开发者提供了一套完整的参数优化方法论,帮助避免常见的'scale out of bounds'等错误,显著提升同态加密应用的可靠性和效率。

weixin_29315569的博客 230

openresty(nginx)+ lua + redis实现接口防刷

而限流是指比如是在搞活动期间流量突增,假设我们的后端的服务器有个接口最大能抗住 1000QPS,但是在这个时间点突然进来了 2000QPS,请求经过限流之后,按照请求的时间先后,先放过我们设定 900 个请求,其余的请求会在队列里等待之前的请求处理完成,而不是像防刷一样直接返回异常。我们的防刷已经完成了,超量的请求就到不了后端了,而且这个 IP 还会被锁一段时间,但是对于阈值的设定必须要往大了设置,避免刷掉有效的请求。的结果,第一次出现的结果和上面(上图)一致,第二次的结果如下。

qq_30029665的博客 1581

告别BAPI!深入SAP S/4HANA BP框架:cl_md_bp_maintain维护客户主数据的正确姿势与性能优化

本文深入解析SAP S/4HANA中cl_md_bp_maintain框架的高效实践与架构设计,对比传统BAPI方式,展示其在业务伙伴(BP)主数据维护中的性能优势与现代化特性。通过详细代码示例和性能测试数据,揭示如何利用该框架实现批量处理、集中校验及智能错误恢复,助力企业从ECC向S/4HANA平滑迁移。

weixin_30596735的博客 361

伪距单点定位算法原理以及利用最小二乘法计算实例

即该公式:建立下列代价函数满足最佳估值的条件为:即:可解得未知参数 X 的最佳估值由于每个可见卫星观测量的精度可能不一样,这时,需要对不同观测量赋予一个权重系数,称为加权。

qq_43381998的博客 1万+

OpenResty实现限流的几种方式

在 Lua 脚本中,可以使用 Lua 的数据结构和 Redis、内存共享字典等存储组件来实现自定义的限流逻辑,例如基于 IP 地址或用户令牌进行限流。使用 Lua 编写自定义限流逻辑,通过 Lua 脚本在 Nginx 的请求处理阶段进行限流判断。在 Lua 脚本中实现令牌桶算法,根据需要的令牌数和速率来控制请求的通过与否,可以在 Nginx 的。如果需要更灵活的限流策略,可以考虑使用 Lua 编写自定义逻辑或结合 Redis 实现令牌桶算法。模块,可以通过该模块实现基于请求数或速率的简单限流。

完颜振江 1548

2021-09-29 每天几个LCEDA小知识——如何交叉选择并阵列放置元器件

立创EDA专业版之交叉选择并阵列放置元器件????交叉选择????阵列放置 ????交叉选择 在原理图界面,先框选需要交叉选择的元器件对象,右键,选择交叉选择(如果熟练之后,直接选择元器件,快捷键Shift+X)。 完成上述操作之后,可以看到自动跳转到PCB绘图界面,并自动选定PCB中相关的元器件,接下来不要取消选择的状态,在相关元器件被选中的情况下,即可开展阵列放置,将这些元器件都放在一个区域,方便PCB画线前的布局工作。 ????阵列放置 在布局菜单栏中,选择分布,选择阵列分布, 在弹出的对话框

l64481000的博客 1465

OpenResty

OpenResty 不是 “替代 Nginx”,而是 “增强 Nginx”—— 它保留了 Nginx 的高性能,同时通过 Lua 脚本赋予了 Nginx 强大的动态扩展能力,尤其适合高并发、低延迟的场景(如 API 网关、高性能接口)。需要 API 网关(路由、鉴权、限流);想要开发高性能 Web 应用(并发 > 1 万,延迟 < 10ms);希望用简单的脚本扩展 Nginx 功能(无需写 C 模块);那么 OpenResty 是最优选择之一。

qq_58967403的博客 2215

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

openResty+lua+nginx实现缓存操作

openResty+lua实现缓存操作

weixin_44045520的博客 809

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【高级前端架构进阶】深入理解Nginx的限流与熔断机制

Nginx限流与熔断机制摘要 本文介绍了Nginx实现限流和熔断的核心机制。主要内容包括: 限流原理:详细解析了令牌桶和漏桶算法的工作原理,通过Mermaid流程图展示了限流处理流程。 配置方法: limit_req_zone定义限流区域 limit_req应用请求频率限制 limit_conn_zone和limit_conn实现并发连接控制 实用案例:提供了登录页面、API接口等场景的配置示例,展示了IP、URI等多维度限流策略。

silverclayz的技术分享 1434

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OpenResty实战:基于Nginx+Lua构建高性能动态API网关

在Web架构中,Nginx作为高性能的反向代理和负载均衡器,其静态配置模式在处理复杂业务逻辑时存在局限。通过引入Lua脚本引擎,OpenResty扩展了Nginx的能力边界,使其能够在请求处理的生命周期中动态执行逻辑。这项技术的核心价值在于将轻量级业务逻辑前置到网关层,实现高并发、低延迟的处理,同时保持架构的简洁性。其典型应用场景包括动态鉴权、API聚合、实时限流和配置热更新等。本文以构建动态API网关为例,详细阐述了如何利用OpenResty的**鉴权**和**限流**模块,在Nginx的访问控制和内容生

weixin_33910460的博客 407

Webhook端点防护实战:基于Nginx的智能限流与IP管理方案

在API安全与系统稳定性领域,请求限流与IP访问控制是两项基础且关键的技术。限流通过控制单位时间内的请求数量,防止服务因突发流量过载,其核心原理通常基于漏桶或令牌桶算法,确保流量平滑处理。IP管理则基于网络层标识,通过黑白名单机制实现访问权限的精准控制,从源头上过滤恶意请求。这两项技术的工程价值在于,它们能以较低成本为公开服务构建第一道防线,有效抵御DDoS攻击、资源耗尽及未授权访问等风险,保障后端服务的可用性与数据安全。在Webhook调试、开放API接口及微服务网关等场景中,结合Nginx反向代理的高性

weixin_34138056的博客 427

Nginx+lua+openresty

轮询:按照时间分配到不同的服务器Least Connections:使每台服务器的链接数都尽可能小IP_HASH:使用户的访问固定在某台服务器上,方便服务器记录session,如果donw了,就到下一个服务器Generic HASH:可以选择不同的hash模式Least time:暂时不管random:随机,也可以设置权重nginx和springCloudAlibaba都有限流的功能,区别还是没有很清楚。

he___H的博客 291

OpenResty、lua实现多级缓存

lua安装 curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxf lua-5.3.5.tar.gz cd lua-5.3.5 make linux test 注意:此时安装,有可能会出现如下错误: 此时需要安装lua相关依赖库的支持,执行如下命令即可: yum install libtermcap-devel ncurses-devel libevent-devel readline-devel 此时再执行lua测试看lua是否安装成功

毛利南的博客 877

OpenResty与Redis高性能集成:Lua协程操作缓存与原子脚本实践

缓存是提升Web应用性能的核心技术,通过在内存中存储热点数据,减少数据库访问,从而显著降低响应延迟。其原理基于局部性原理,利用内存的高速读写特性。在技术实现上,Nginx作为高性能Web服务器,通过反向代理和负载均衡处理海量并发,而Redis作为内存数据结构存储,提供丰富的数据类型和原子操作。将两者结合,OpenResty通过内嵌LuaJIT引擎,允许在Nginx处理阶段直接执行Lua脚本操作Redis,实现了架构扁平化。这种技术组合的价值在于减少了网络跳转和序列化开销,特别适用于高并发场景如秒杀、实时计数

weixin_30654583的博客 320
上一篇: mysql利用存储过程批量插入数据
下一篇: Openresty Redis正确使用连接池(set_keepalive)
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值