Nginx+Lua+Redis 对请求进行限制
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"
转载于:https://www.cnblogs.com/huligong1234/p/4163832.html
Nginx+Lua+Redis 对请求进行限制相关推荐
- nginx lua redis 访问频率限制(转)
1. 需求分析 Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的 ...
- nginx+lua+redis 灰度发布实现方案
背景: 公司要把现有的某传统项目进行微服务化,拆分后要分批次预发布,实现某部分使用户使用微服务模块,其他用户使用传统项目.待微服务稳定.无bug后全部用户迁移至微服务系统. 以上为背景,实现此方案使用 ...
- 利用nginx+lua+redis实现反向代理方法教程
这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...
- nginx+lua+redis实现降级
前言 商城或web站点的用户访问量出乎意料地增加了很多,超出了系统的负载能力, 系统有些扛不住,继而导致注 册,下单,支付什么的全部在绕圈卡住,继而导致公司业务损失了不少用户和订单.. 一.引子 面对 ...
- nginx+lua+redis deny ip
2019独角兽企业重金招聘Python工程师标准>>> nginx+lua+redis实现ip黑名单 1.安装LuaJIT LuaJIT LuaJIT即采用C语言写的Lua代码的解释 ...
- windows下nginx+lua+redis实现短域名服务
nginx+lua+redis 环境搭建: 我使用的是大牛 ZhangYichun 提供的集成包快速安装. 非常简单,下载 ngx_openresty,该集成包中有:Nginx,Lua或Luajit, ...
- nginx+lua+redis实现post请求接口之黑名单(一)
一.概述 需求:所有访问/webapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器(Tomcat) 实现思路:通过在Nginx上 ...
- Nginx+Lua+Redis实现广告缓存
1.需求分析 需要在页面上显示广告的信息. 2.OpenResty 2.1.OpenResty介绍 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web ...
- Nginx + Lua + redis (一)(转)
使用 Lua 脚本语言操作 Redis. 由于大量的 Lua 代码写在 Nginx 中,会使配置文件显得很繁琐,所以这里使用 content_by_lua_file 来引入 Lua 脚本文件. 要使用 ...
最新文章
- 算法_bitmap算法
- Csharp volatile 关键字
- 行业职业病+生活安全事项
- 服务器排障 之 nginx 499 错误的解决
- OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...
- SAP License:ERP系统会计凭证中的那些必填项
- Tensorflow初入门
- ionic3 打包错误解决:Could not resolve all files for configuration ':classpath'.
- 数据库删除数据的方式
- 使用Python face_recognition 人脸识别 - 12 人脸图片1-N比对
- excel转html不显示图片,excel表格怎么把0显示出来/为什么在excel插入背景后预览看不到图片...
- 通过APKIDE 反编译文件得到.java文件方法
- python巡检网络设备_pyhton对网络设备的日常巡检
- Java程序员在用的大数据工具
- 在Composure去除掉对体积云和雾的捕获
- linux 下 格式化u盘 并分区 为fat32文件系统
- 三星mzvlb1t0hblr是什么固态_固态硬盘跑分速度天梯图/天梯表,最全搜集。
- python sys.path用法
- HTTP的几种请求方法
- PCIE设备的x1,x4,x8,x16有什么区别?
热门文章
- ECCV 2020 | 可解释和泛化的行人再辨识
- CVPR 2019 | 近日新出论文汇总(含视频目标分割、GAN、度量学习、高效语义分割等主题)...
- 医疗设备-监护仪-数据解析(协议、通信)
- 为什么我不推荐Python初学者直接看项目源码?工作五年的程序员给的忠告
- 全栈工程师对Python面试中is和==的区别做出解释!看完真的学到了
- 【新手答疑】很迷茫,次世代角色建模我该怎么学习?需要掌握哪些技术?
- 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整
- 一切为了开放科学!Papers with Code 新增CS、物理、数学、统计学等多个学科
- 收藏 | 人脸识别最新进展
- 《Python编程从入门到实践》记录之while循环简介(break、continue)