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 对请求进行限制相关推荐

  1. nginx lua redis 访问频率限制(转)

    1. 需求分析 Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的 ...

  2. nginx+lua+redis 灰度发布实现方案

    背景: 公司要把现有的某传统项目进行微服务化,拆分后要分批次预发布,实现某部分使用户使用微服务模块,其他用户使用传统项目.待微服务稳定.无bug后全部用户迁移至微服务系统. 以上为背景,实现此方案使用 ...

  3. 利用nginx+lua+redis实现反向代理方法教程

    这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...

  4. nginx+lua+redis实现降级

    前言 商城或web站点的用户访问量出乎意料地增加了很多,超出了系统的负载能力, 系统有些扛不住,继而导致注 册,下单,支付什么的全部在绕圈卡住,继而导致公司业务损失了不少用户和订单.. 一.引子 面对 ...

  5. nginx+lua+redis deny ip

    2019独角兽企业重金招聘Python工程师标准>>> nginx+lua+redis实现ip黑名单 1.安装LuaJIT LuaJIT LuaJIT即采用C语言写的Lua代码的解释 ...

  6. windows下nginx+lua+redis实现短域名服务

    nginx+lua+redis 环境搭建: 我使用的是大牛 ZhangYichun 提供的集成包快速安装. 非常简单,下载 ngx_openresty,该集成包中有:Nginx,Lua或Luajit, ...

  7. nginx+lua+redis实现post请求接口之黑名单(一)

    一.概述 需求:所有访问/webapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器(Tomcat) 实现思路:通过在Nginx上 ...

  8. Nginx+Lua+Redis实现广告缓存

    1.需求分析 需要在页面上显示广告的信息. 2.OpenResty 2.1.OpenResty介绍 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web ...

  9. Nginx + Lua + redis (一)(转)

    使用 Lua 脚本语言操作 Redis. 由于大量的 Lua 代码写在 Nginx 中,会使配置文件显得很繁琐,所以这里使用 content_by_lua_file 来引入 Lua 脚本文件. 要使用 ...

最新文章

  1. 算法_bitmap算法
  2. Csharp volatile 关键字
  3. 行业职业病+生活安全事项
  4. 服务器排障 之 nginx 499 错误的解决
  5. OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...
  6. SAP License:ERP系统会计凭证中的那些必填项
  7. Tensorflow初入门
  8. ionic3 打包错误解决:Could not resolve all files for configuration ':classpath'.
  9. 数据库删除数据的方式
  10. 使用Python face_recognition 人脸识别 - 12 人脸图片1-N比对
  11. excel转html不显示图片,excel表格怎么把0显示出来/为什么在excel插入背景后预览看不到图片...
  12. 通过APKIDE 反编译文件得到.java文件方法
  13. python巡检网络设备_pyhton对网络设备的日常巡检
  14. Java程序员在用的大数据工具
  15. 在Composure去除掉对体积云和雾的捕获
  16. linux 下 格式化u盘 并分区 为fat32文件系统
  17. 三星mzvlb1t0hblr是什么固态_固态硬盘跑分速度天梯图/天梯表,最全搜集。
  18. python sys.path用法
  19. HTTP的几种请求方法
  20. PCIE设备的x1,x4,x8,x16有什么区别?

热门文章

  1. ECCV 2020 | 可解释和泛化的行人再辨识
  2. CVPR 2019 | 近日新出论文汇总(含视频目标分割、GAN、度量学习、高效语义分割等主题)...
  3. 医疗设备-监护仪-数据解析(协议、通信)
  4. 为什么我不推荐Python初学者直接看项目源码?工作五年的程序员给的忠告
  5. 全栈工程师对Python面试中is和==的区别做出解释!看完真的学到了
  6. 【新手答疑】很迷茫,次世代角色建模我该怎么学习?需要掌握哪些技术?
  7. 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整
  8. 一切为了开放科学!Papers with Code 新增CS、物理、数学、统计学等多个学科
  9. 收藏 | 人脸识别最新进展
  10. 《Python编程从入门到实践》记录之while循环简介(break、continue)