文章来源:http://blog.csdn.net/qq_26656329/article/details/78842005

关于Response Rate Limiting插件

说明

插件实现是在每个代理upstream API之前添加header信息,以便正确的拒绝处理该请求;
插件启用的时候,响应时会告诉客户端可以请求多少次、有多少次请求可以用;
比如:

X-RateLimit-Limit-Videos-Minute: 10
X-RateLimit-Remaining-Videos-Minute: 9

如果有多种限制组合,则返回更多的限制组合

Rate Limiting插件常用参数

尽量把每个参数都测试一遍


name:插件名称,必选参数,每月默认值;
consumer_id:消费者id,可选参数,没有默认值,如果留空,该插件将适用于所有消费者;
config.second:每秒请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.minute:每分钟请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.hour:每小时请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.day:每天请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.month:每月请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.year:每年请求限制(int),半可选参数(限制必须存在一项),没有默认值;
config.limit_by:可以使consumer、credential或ip,默认是消费者,如果consumer或credential没有设置时,根据ip来限制,可选参数;# 小时天和年的太久了就没测试config.hide_client_headers:是否隐藏头信息,可选参数,默认False;

添加API

function add_api($data=[])
{if (empty($data)){$data = ['name' => 'ip_api','upstream_url' => 'http://ip.taobao.com/service/getIpInfo.php?ip=14.215.177.39','methods' => 'GET','uris' => '/ip/query'];}$curl = curl_init('http://localhost:8001/apis/');curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($curl, CURLOPT_POSTFIELDS, $data);$output = curl_exec($curl);curl_close($curl);return $output;
}
print_r(add_api());exit;

返回值

{"created_at":1513673389000,"strip_uri":true,"id":"bbe7aaae-ea06-43ad-a69c-43b0889faf26","name":"ip_api","methods":["GET"],"http_if_terminated":false,"preserve_host":false,"upstream_url":"http://ip.taobao.com/service/getIpInfo.php?ip=14.215.177.39","uris":["/ip/query"],"upstream_send_timeout":60000,"upstream_connect_timeout":60000,"upstream_read_timeout":60000,"retries":5,"https_only":false
}

关联插件

function rate_limiting($api_name = '', $data = [])
{if(empty($data)){$data = ['name' => 'rate-limiting','config.minute' => 5,];}$curl = curl_init(sprintf('http://localhost:8001/apis/%s/plugins', $api_name));curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($curl, CURLOPT_POSTFIELDS, $data);$output = curl_exec($curl);curl_close($curl);return $output;
}
print_r(rate_limiting('ip_api'));exit;

返回值

{"created_at":1513673424000,"config":{"hide_client_headers":false,"minute":5,"policy":"cluster","redis_database":0,"redis_timeout":2000,"redis_port":6379,"limit_by":"consumer","fault_tolerant":true},"id":"85d76dae-b50e-4e25-9f6b-1032a7e92a6f","name":"rate-limiting","api_id":"bbe7aaae-ea06-43ad-a69c-43b0889faf26","enabled":true
}

通过http://localhost:8001端口来看看这个API的信息

// http://localhost:8001/apis/ip_api
{"created_at":1513673389000,"strip_uri":true,"id":"bbe7aaae-ea06-43ad-a69c-43b0889faf26","name":"ip_api","methods":["GET"],"http_if_terminated":false,"https_only":false,"upstream_url":"http://ip.taobao.com/service/getIpInfo.php?ip=14.215.177.39","uris":["/ip/query"],"preserve_host":false,"upstream_connect_timeout":60000,"upstream_read_timeout":60000,"upstream_send_timeout":60000,"retries":5
}// http://localhost:8001/apis/ip_api/plugins
{"total":1,"data":[{"created_at":1513673424000,"config":{"hide_client_headers":false,"minute":5,"policy":"cluster","redis_database":0,"redis_timeout":2000,"redis_port":6379,"limit_by":"consumer","fault_tolerant":true},"id":"85d76dae-b50e-4e25-9f6b-1032a7e92a6f","enabled":true,"api_id":"bbe7aaae-ea06-43ad-a69c-43b0889faf26","name":"rate-limiting"}]
}

添加限制组合

function add_limiting($api_name = '', $plugin_id = '', $data = [])
{if(empty($data)){$data = ['name' => 'rate-limiting','config.second' => 1,];}$curl = curl_init("http://localhost:8001/apis/{$api_name}/plugins/{$plugin_id}");curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");curl_setopt($curl, CURLOPT_POSTFIELDS, $data);$output = curl_exec($curl);curl_close($curl);return $output;
}
print_r(add_limiting('ip_api', '85d76dae-b50e-4e25-9f6b-1032a7e92a6f'));exit;

返回值

{"created_at":1513673424000,"config":{"minute":5,"policy":"cluster","redis_timeout":2000,"hide_client_headers":false,"second":1,"limit_by":"consumer","redis_port":6379,"redis_database":0,"fault_tolerant":true},"id":"85d76dae-b50e-4e25-9f6b-1032a7e92a6f","name":"rate-limiting","api_id":"bbe7aaae-ea06-43ad-a69c-43b0889faf26","enabled":true
}

测试

头信息

curl -I -X GET http://localhost:8000/ip/queryHTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-RateLimit-Limit-minute: 5
X-RateLimit-Remaining-minute: 4
Server: Tengine
Date: Tue, 19 Dec 2017 08:57:18 GMT
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.6
X-Kong-Upstream-Latency: 59
X-Kong-Proxy-Latency: 23
Via: kong/0.11.0

访问测试

for ($i = 0; $i < 10; $i++){$curl = curl_init('http://localhost:8000/ip/query');curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");$output = curl_exec($curl);curl_close($curl);print_r($output);
}
exit();
{"code":1,"data":"no ip param."
}
{"message":"API rate limit exceeded"
}

kong插件之Rate Limiting相关推荐

  1. Kong的插件:Rate Limiting

    简述 这个插件是限流使用的,如果我们后端服务扛不住前端的流量或者要防止某些人恶意的使用流量攻击我们,可以考虑一下限流 操作起来 试验准备 要有一个可用的service和route,如果没有可以参照ht ...

  2. kong的插件: Response Rate Limiting

    简述 这也是一种限流的插件和Rate Limiting相似,但是有一定的区别.Response Rate Limiting是由后端服务控制频率的减少,而Rate Limiting是由Kong完成的. ...

  3. Kong Rate Limiting 插件详解

    Rate Limiting插件 基本描述: 属性 描述 插件作用域 服务.路由.全局 适用协议 http.https 配置信息: 属性 描述 参数 描述 name 插件名称.此处为rate-limit ...

  4. API Gateway/API 网关(三) - Kong的使用 - 限流rate limiting(redis)

    一.前言 Kong的限流支持三种方式,分别是本地限流(Local).数据库限流(Cluster)和Redis限流,这三种限流方式采用的限流算法都是计数器法.支持按照秒/分/小时/日/月/年等不同时间单 ...

  5. [转]架构必备:Rate limiting 的作用和常见方式

    转载文章,原文地址:https://blog.eood.cn/rate-limiting Rate limiting 在 Web 架构中非常重要,是互联网架构可靠性保证重要的一个方面. 从最终用户访问 ...

  6. Rate Limiting速率限制

    Rate Limiting速率限制 Rate limiting in swift isimplemented as a pluggable middleware. Rate limiting is p ...

  7. 架构必备:Rate limiting 的作用和常见方式

    原文  http://blog.eood.cn/rate-limiting Rate limiting 在 Web 架构中非常重要,是互联网架构可靠性保证重要的一个方面. 从最终用户访问安全的角度看, ...

  8. Rate Limiting Algorithms (限流算法)

    1. Leaky Bucket (漏桶) 漏桶是一种常用的限流策略.NGINX 和 QEMU 中利用漏桶来实现限流.在漏桶模型中,桶的容量是固定的,当桶被流进的水填满时,多余的水就会溢出:虽然水可以以 ...

  9. 高可用服务设计之二:Rate limiting 限流与降级

    <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...

最新文章

  1. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)
  2. File类的使用(java)
  3. linux中ftp保持连接,linux – FTP’ing大文件时如何防止TCP连接超时?
  4. Shiro-从数据表中初始化资源和权限
  5. 在MAC上安装mysql
  6. 一文说透区块链为何必须扩容,扩容的未来在哪里?
  7. 【室内定位】采用TOA借助多个基站与终端之间距离进行目标定位matlab源码
  8. 计算机替换字体怎么操作,电脑怎么更换字体-电脑更换字体的方法 - 河东软件园...
  9. QT 代码添加QScrollArea
  10. 从零起步做到运维技术经理,你必须掌握的23个细节!
  11. 美国大学计算机科学专业研究生排名,美国大学计算机科学专业研究生排名介绍...
  12. iOS 最新 APP提交上架流程~(打包 ipa)
  13. vue中注释里@xxx是什么意思呢???
  14. [待解答]R语言读文件报错“列的数目比列的名字要多”
  15. 前端学习——HTML(二) 列表
  16. stm32 驱动 TFT LCD
  17. stay hungry stay foolish原文_2020考研英语二大纲原文
  18. OSPF---路由备份的设计实验
  19. 华为鸿蒙系统与麒麟系统,搭载鸿蒙系统,麒麟9000处理器
  20. matlab汽车驱动力与行驶阻力,汽车理论课程设计:基于Matlab的汽车动力性的仿真...

热门文章

  1. ByteDance字节跳动张一鸣:如何阅读、如何了解自己、如何与人沟通沟通、如何安排时间、如何正确的看待别人意见、如何激励自己、如何写作、如何坚持锻炼身体、如何耐心?...
  2. MyBatis:万能Map和模糊查询(狂神)
  3. 蓝牙耳机哪个品牌经济实惠?价格便宜音质好的蓝牙耳机推荐
  4. 索尼1000xm3成功配对小米5 蓝牙支持ldac传输
  5. 迷你csgo饰品租赁系统
  6. 基于多传感器数据融合的全自动泊车系统研究与应用(开题报告)
  7. C语言九:位域(位域声明、位域的定义和位域变量的说明、对于位域定义的几点说明:、位域的使用)、typedef(typedef vs #define)、强制类型转换(整数提升、常用的算术转换)
  8. 简单介绍一下web开发中用到的一些技术
  9. 水晶报表设置纸张大小
  10. 计算机图形学椭圆Java代码,【计算机图形学】二、椭圆的生成