当前位置: 首页 > news >正文

nginx Ingress 限流Lua脚本

可用于生产的版本配置已经添加好并且已经测试过功能。

针对客户端IP对单个域名的分钟级访问。

ingress-nginx cm配置文件

添加下面的配置,主要作用是把xforwardfor的客户端真实IP地址传给remote_address,脚本中的限频就是根据这个客户端的真实IP地址来的,添加set-real-ip-from可以防止伪造。

rate_limit_dict在http字段中声明一个桶50m,用来存放每个请求的访问记录信息。

  http-snippet: |lua_shared_dict rate_limit_dict 50m;real-ip-header: X-Forwarded-Forset-real-ip-from: |10.0.0.0/8192.168.0.0/16172.30.0.0/16use-forwarded-headers: "true"

ingress配置

脚本中可以设置白名单,每个请求会先检查客户端的IP地址,然后判断是否在白名单中,如果没有在白名单中则进行key的判断。首先判断"IP:domain"的字符串key在桶中的统计,如果不在就在字典中设置该key并指定生命周期值,如果在检查该key,在生命周期内的统计是否超过了限制的阈值。超过返回429,没有超过就把命中次数在桶中+1.

直接通过片段的方式叠加在想要的ingress注释中。

    nginx.ingress.kubernetes.io/configuration-snippet: |access_by_lua_block {local bit = require "bit"local function ip_to_int(ip)local o1, o2, o3, o4 = ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")if not o1 then return nil endreturn bit.lshift(o1, 24)+ bit.lshift(o2, 16)+ bit.lshift(o3, 8)+ o4endlocal function cidr_match(ip, cidr)local base, mask = cidr:match("(.+)/(%d+)")if not base then return false endlocal ip_int   = ip_to_int(ip)local base_int = ip_to_int(base)local mask_num = tonumber(mask)if not ip_int or not base_int then return false endlocal mask_int = bit.lshift(0xffffffff, 32 - mask_num)return bit.band(ip_int, mask_int) == bit.band(base_int, mask_int)endlocal white_ips = {["120.10.211.89"] = true,["120.10.52.221"]  = true,["110.10.83.75"]  = true,["127.0.0.1"]  = true,}local white_cidrs = {"172.30.0.0/16","192.168.0.0/16","10.0.0.0/8",}local client_ip = ngx.var.remote_addrif white_ips[client_ip] thenreturnendfor _, cidr in ipairs(white_cidrs) doif cidr_match(client_ip, cidr) thenreturnendendlocal rate_limit_key = client_ip .. ":" .. ngx.var.hostlocal limit_count = 1500local limit_time = 60local dict = ngx.shared.rate_limit_dictlocal current_count = dict:get(rate_limit_key)if not current_count thendict:set(rate_limit_key, 1, limit_time)elseif current_count >= limit_count thenngx.status = ngx.HTTP_TOO_MANY_REQUESTSngx.header["Content-Type"] = "application/json"ngx.say('{"code":429,"msg":"Access too fast. Please try again later."}')ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS)elsedict:incr(rate_limit_key, 1)end}
http://www.jsqmd.com/news/266753/

相关文章:

  • 窗帘裁剪机|卷边机有实力的源头厂家哪家强?浙江屹杰科技窗帘设备凭实力领跑 - 资讯焦点
  • 如何快速搭建一套物联网平台
  • VirtualLab Fusion应用:衍射光束扩散器产生LightTrans标识的设计与分析
  • 2026年中国GEO优化服务商格局新观察:头部企业梳理与选择推荐 - 十大品牌推荐
  • IDEA 2025.3.1.1 紧急发布,修复重大 BUG!!
  • 2026年评价高的瓦楞板公司推荐:塑料中空板、pp中空板、万通板、中空板周转箱、瓦楞板、防静电中空板、中空板选择指南 - 优质品牌商家
  • 上海单身交友服务哪家性价比高,绿洲婚介所排第几? - 工业品牌热点
  • 联想电脑使用F键
  • 2026年知名的制砂生产线工厂如何选?深度解析 - 品牌宣传支持者
  • 读人本智能产品设计6原则06互动(上)
  • ITK-SNAP 3D展示不显示十字线
  • Windows10右下角时间显示毫秒【任务栏显示毫秒】
  • 2026年比较好的预制钢结构设计公司哪家好?专业推荐 - 品牌宣传支持者
  • 沃尔玛购物卡回收哪家最划算,回收注意以下事项 - 京回收小程序
  • 2025武汉文化课集训学校权威推荐榜单 聚焦合规办学与提分实效 - 品牌评测官
  • 京东e卡回收时需要注意哪些问题呢? - 京顺回收
  • Bloxstrap完全指南:5个技巧提升Roblox游戏体验
  • AMD处理器性能优化终极指南:深度解锁Ryzen隐藏潜能
  • GPX Studio终极指南:5分钟掌握在线GPX文件编辑与可视化分析
  • 魔兽世界API工具:打造你的专属游戏助手
  • 电路过流保护——限流保护芯片
  • 热门的学校油烟管道清洗直销厂家哪家靠谱?最新排行 - 品牌宣传支持者
  • OpenCore Simplify:智能自动化Hackintosh配置终极指南
  • xtrabackup: Fatal error: cannot find ./xtrabackup_logfile
  • Cap开源录屏工具:5分钟快速上手指南
  • AMD处理器深度调优实战:解锁Ryzen隐藏性能的终极指南
  • 避坑指南 | 软著申请补正5大雷区,一次说清,别再白忙一场!
  • 城通网盘直链提取终极指南:3步突破下载限制
  • 拥抱Transformer范式革命:深入解读Transformers Model API的高级应用与实践
  • 如何快速下载Jable视频?2025年最实用的本地下载工具全解析