栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

nginx 实现限流控制(防攻击)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx 实现限流控制(防攻击)

nginx 实现限流控制(防攻击) 故障回顾

2022年8月5日22:06:00:数据库cpu开始升高,直至打满!
2022年8月5日22:06:00:java 服务cpu开始升高,直至打满!
2022年8月5日22:07:00:钉钉群内出现告警
2022年8月5日22:07:05:服务自动重启
2022年8月5日22:10:00:开始排查原因
2022年8月5日22:20:00:排查结果:连接数升高,变高的是因为为用户开始多次请求刷新接口,多用户压测导致
2022年8月5日23:25:00:发现java继续服务重启。
2022年6月30日23:28:00:重启gateway 服务断开所有的请求,开始验证流量是否正常
2022年6月30日22:58:00:数据库升级 cpu,内存

故障分析
  1. 主要原因是慢sql导致数据库cpu跑满
  2. 没有进行并发限制,大量请求堆积导致无法快速恢复。
  3. 一旦有后端接口请求失败,会导致app、网页不可用。没有强依赖的接口列表和日志
改进措施
  1. 将大量活跃的sql 请求 和 SQL并发量,进行限制,故障恢复后,进行关闭!
  2. 监控到位 出现报警 应该立即结束时间较长的 sql 会话
  3. 开发做缓存
  4. 做读写分离
  5. nginx 做限流

可见这Nginx流控的配置还是很重要,所以,今天也整理了Nginx的流量限制的基础知识和高级配置,

Nginx如何限流

Nginx的”流量限制”使用漏桶算法(leaky bucket algorithm),该算法在通讯和分组交换计算机网络中广泛使用,用以处理带宽有限时的突发情况。就好比,一个桶口在倒水,桶底在漏水的水桶。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水将会溢出;同样,在请求处理方面,水代表来自客户端的请求,水桶代表根据”先进先出调度算法”(FIFO)等待被处理的请求队列,桶底漏出的水代表离开缓冲区被服务器处理的请求,桶口溢出的水代表被丢弃和不被处理的请求。

正常流量
ab -n 30  https://qxh.qcb.cn/           #压测  

http {
    limit_req_zone $binary_remote_addr zone=one: 10m rate=12r/m;
    
    server {
        location / {
            limit_req zone=one burst=10 delay=8;
        }
}

一分钟 允许请求12次 、其中有8个会被快速处理、其余桶里可以存放10个请求,每5秒一次,释放、

#zone=one:10m 表示该空间容量为10M,名称为"one"

报503效果不太好 优化一下

    location / {
        limit_req zone=one burst=10 delay=8;limit_req_status 444;limit_req_log_level warn;

我们将被拒绝请求的日志记录级别设置为warn
其他返回 444


吧 444 改成 429 客户端才会有这个效果哦

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号