Nginx怎么实现限流

技术Nginx怎么实现限流这篇文章主要为大家展示了“Nginx怎么实现限流”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Nginx怎么实现限流”这篇文章吧。Nginx 限流N

本文主要给大家展示“Nginx是如何实现限流的”,简单易懂,组织清晰,希望能帮你解开疑惑。让边肖带领你学习《Nginx如何实现限流》一文。

Nginx 限流

Nginx为我们提供了请求限制模块(ngx_http_limit_req_module)、基于令牌桶算法的流量限制模块(ngx_stream_limit_conn_module),可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制…

00-1010请求限制的功能来自ngx_http_limit_req_module模块。要使用它,首先需要在http配置部分定义限制的参考标准和状态缓冲区大小。

limit_req_zone只能在http范围内配置;

$binary_remote_addr表示客户端请求的IP地址;

mylimit本身定义的变量名;

速率请求频率,每秒允许多少请求;

limit_req对应于limit_req_zone,突发指示缓存请求的数量,即任务队列。

以下配置被定义为使用客户端的IP作为参考,并使用10M大小的状态缓冲区。结束速率=1r/s意味着每个IP的请求每秒只被接受一次。

10M状态缓冲空间够吗?官方给出的答案是,1M缓存空间在32位系统中可以服务32000个IP地址,在64位系统中可以服务16000个IP地址,因此需要根据情况进行调整。如果状态缓存耗尽,所有后续请求都将收到503(服务暂时不可用)错误。

脚本代码

#定义请求频率为每秒1个请求(nr/s)的mylimit缓冲区(容器)

limit _ req _ zone $ binary _ remote _ addrzone=my limit :10m rate=1r/s;

服务器{

列表70;

位置/

#nodelay不会延迟处理

#burst是配置的超额处理,可以简单理解为排队机制。

#上面配置了同一IP每秒只能发送一个请求(1r/s),这里配置为缓存三个请求,这意味着同一秒内只能有四个任务成功响应,而其他任务请求失败(503服务不可用)。

limit _ reqzone=my limit burst=3 modelay;

proxy _ pass http://localhost :7070;

}

}测试代码

为了方便起见,这里提供了JAVA和AB测试代码。

#-n指定执行压力测试的总次数。

#-c是指定的并发数。

a B- n5-c 5http://192 . 168 . 0 . 133:70/indexpackagecom . battcn . limiting;

import org . spring framework . http . response entity;

import org . spring framework . web . client . rest template;

import Java . util . concurrent.completablefuture;

import Java . util . concurrent . executionexception;

import Java . util . concurrent . executorservice;

import Java . util . concurrent . executors;

/**

*@authorLevin

* @自2018年7月27日起

*/

public classinginxlimitertest {

public static void main(String[]args)nb

sp;throws ExecutionException, InterruptedException {
        ExecutorService service = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 6; i++) {
            CompletableFuture.supplyAsync(() -> {
                final ResponseEntity<String> entity = new RestTemplate().getForEntity("http://192.168.0.133:70/index", String.class);
                return entity.getBody();
            }, service).thenAccept(System.out::println);
        }
        service.shutdown();
    }
}

测试日志

此处提供 AB 测试结果 JAVA 的日志就不贴了,5个请求其中一个请求是有问题的,出问题的那个就是被拒绝请求的…

[root@localhost myconf]# ab -n 5 -c 5 http://192.168.0.133:70/index
Document Path:          /index
Document Length:        34 bytes
Concurrency Level:      5
Time taken for tests:   0.002 seconds
Complete requests:      5
Failed requests:        1
   (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)

并发限制

Nginx 并发限制的功能来自于 ngx_http_limit_conn_module 模块,跟请求配置一样,使用它之前,需要先定义参照标准和状态缓存区。

limit_conn_zone 只能配置在 http 范围内;

$binary_remote_addr 表示客户端请求的IP地址;

myconn 自己定义的变量名(缓冲区);

limit_rate 限制传输速度

limit_conn 与 limit_conn_zone 对应,限制网络连接数

下面的配置就是定义了使用客户端的 IP 作为参照依据,并使用一个 10M 大小的状态缓存区。限定了每个IP只允许建立一个请求连接,同时传输的速度最大为 1024KB

脚本代码

# 定义了一个 myconn 缓冲区(容器)
limit_conn_zone $binary_remote_addr zone=myconn:10m;
server {
listen  70;
location / {
# 每个 IP 只允许一个连接
limit_conn myconn 1;
# 限制传输速度(如果有N个并发连接,则是 N * limit_rate)
limit_rate 1024k;
proxy_pass http://localhost:7070;
}
}

以上是“Nginx怎么实现限流”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/115160.html

(0)

相关推荐

  • 水尤清冽,小石潭记原文一句一句翻译

    技术水尤清冽,小石潭记原文一句一句翻译《小石潭记》一、全文翻译水尤清冽。
    原文:从小丘西行百二十步,隔篁竹闻水声,如鸣佩环,心乐之。
    译文:从小丘向西行走一百二十步,隔着竹林,听见水声,好象挂在身上的玉佩、玉环相互碰撞发

    生活 2021年10月22日
  • C++11列表初始化是怎样的

    技术C++11列表初始化是怎样的这篇文章主要介绍“C++11列表初始化是怎样的”,在日常操作中,相信很多人在C++11列表初始化是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++

    攻略 2021年11月25日
  • 树莓派怎么控制SG90舵机

    技术树莓派怎么控制SG90舵机今天就跟大家聊聊有关树莓派怎么控制SG90舵机,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SG90一共三根线,红线接5V电源,棕线

    攻略 2021年11月19日
  • 尬怎么读,什么牌子的女装适合四十岁的女人

    技术尬怎么读,什么牌子的女装适合四十岁的女人你好尬怎么读,我是山宗溪,专注分享最实用最接地气的穿搭~四十岁一点都不尴尬,我觉得正是最有魅力的时候,它的魅力不是指身材、相貌,而是指阅历、思想、工作经验等等比较“虚”的东西。

    生活 2021年10月27日
  • 岁寒三友是指什么,《寻隐者不遇》全诗的意思

    技术岁寒三友是指什么,《寻隐者不遇》全诗的意思《寻隐者不遇》贾岛    
    松下问童子,言师采药去岁寒三友是指什么。
    只在此山中,云深不知处。 1. 译文如下:
    苍松下,我询问隐者的童子他的师傅到哪里去了?
    他说,

    生活 2021年10月21日
  • nagiosQL怎么安装

    技术nagiosQL怎么安装这篇文章主要介绍了nagiosQL怎么安装,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。安装nagiosql1.yum -y

    攻略 2021年10月21日