nginx+lua+redis实现post请求接口之黑名单(一)
一、概述
需求:所有访问/webapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器(Tomcat)
实现思路:通过在Nginx上进行访问限制,通过Lua来灵活实现业务需求,而Redis用于存储黑名单列表。
二、具体实现
1.lua代码
本例中限制规则包括(post请求,ip地址黑名单,请求参数中imsi,tel值和黑名单)
[root@git-server ~]# cat /usr/local/nginx/conf/lua/ipblacklist.lua
ngx.req.read_body()local redis = require "resty.redis"
local red = redis.new()
red.connect(red, '127.0.0.1', '6379')local myIP = ngx.req.get_headers()["X-Real-IP"]
if myIP == nil thenmyIP = ngx.req.get_headers()["x_forwarded_for"]
end
if myIP == nil thenmyIP = ngx.var.remote_addr
endif ngx.re.match(ngx.var.uri,"^(/webapi/).*$") thenlocal method = ngx.var.request_methodif method == 'POST' thenlocal args = ngx.req.get_post_args()local hasIP = red:sismember('black.ip',myIP)local hasIMSI = red:sismember('black.imsi',args.imsi)local hasTEL = red:sismember('black.tel',args.tel)if hasIP==1 or hasIMSI==1 or hasTEL==1 then--ngx.say("This is 'Black List' request")ngx.exit(ngx.HTTP_FORBIDDEN)endelse--ngx.say("This is 'POST' request")ngx.exit(ngx.HTTP_FORBIDDEN)endend
2.nginx.conf
location / {
root html;
index index.html index.htm;access_by_lua_file /usr/local/nginx/conf/lua/ipblacklist.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.验证结果
[root@git-server ~]# curl -d "imsi=460123456789&tel=15800000000" "http://www.kjios.com/myapi/111"
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
转载于:https://blog.51cto.com/wujianwei/2125305
nginx+lua+redis实现post请求接口之黑名单(一)相关推荐
- Nginx+Lua+Redis 对请求进行限制
Nginx+Lua+Redis 对请求进行限制 一.概述 需求:所有访问/myapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器 ...
- 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实现广告缓存
1.需求分析 需要在页面上显示广告的信息. 2.OpenResty 2.1.OpenResty介绍 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web ...
- Nginx+ lua实现http转发请求
最近要使用nginx+lua实现 一个需求: 在nginx的location部分,请求时,判断用户是否为会员,如果是会员,则跳转到a页面,否则跳转到b页面. 用户服务是一个单独的服务,具体lua脚本实 ...
最新文章
- 程序员持续成长,需要持久而痛苦的学习
- 2018-3-12论文(非结构网络中有价值信息数据挖掘)笔记二-----作者:关联规则的非结构网络有价值信息数据挖掘(看不懂,看不懂)
- MySQL第2天:MySQL的架构介绍之MySQL介绍
- JavaScript技术篇 - js的null值判断,js的undefined的判断,js的null与undefined的2种区分方法
- 历史上最简单的一道Java面试题,但无人能通过
- cocos2d-x 帧动画
- 二维码识别中面临的主要问题
- 广域网协议之PPP,HDLC
- Activiti CamelTask(骆驼任务)
- OpenGL ES glad 下载和使用
- python 学习目录
- 计算机硬件维护注意事项,电脑硬件日常维护和注意事项
- 终极解决maya渲染层丢材质,变线框等问题
- Matlab之min()、max()函数(求最小、最大值)
- log4j2日志配置颜色
- 字节跳动薪酬体系最全揭晓|看完我是真酸了,不服不行
- 分享一款光彩四射的CSS3按钮集合
- SpringBoot18:集成SpringSecurity
- 什么是gnuplot
- 百度地图API——修改infowindow样式