nginx限速配置的三种方法(limit_req、limit_conn、limit_rate)

 更新时间:2023年08月24日 11:52:02   作者:_Hey_Jude  
本文主要介绍了nginx限速配置的三种方法,主要包括limit_req、limit_conn、limit_rate,本文就详细的介绍一下如何使用,感兴趣的可以了解一下

目前来说在nginx上面我们常见的三种限速操作分别是

  • 限制请求数(request) limit_req
  • 限制连接数(connection)  limit_conn
  • 限制响应速度(rate)   limit_rate 

1. limit_req

限制在一段时间内的HTTP请求的数量,主要算法原理就是基于在计算机网络中当带宽是有限时十分常用的漏桶算法

基本原理就是:以漏桶为例,水从顶部倒入,从底下漏出。这里的几个概念分别是:

  • 漏桶对应我们服务器的带宽或者是处理请求的能力或者是一个队列
  • 水表示客户端发送过来的请求
  • 倒入的水则代表客户端发送给服务器但尚未进行处理的请求,此时请求仍在队列(在桶内)
  • 漏出的水则代表从队列中出来即将发送给服务器端处理的请求,此时请求已经离开了队列(在桶外)

漏桶在一定程度上可以代表服务器的处理能力,请求根据先进先出(FIFO)调度算法等待处理。如果倒入水的速度小于漏水的速度,可以理解为服务器能够处理完所有的请求,此时整体服务表现正常。如果倒入水的速度大于漏水的速度,那么水桶内的水会不断增加直到最后溢出,这种情况下在水桶中的水可以理解为在队列中等待的请求,而溢出的水则表示直接被丢弃不处理的请求。

限速配置:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
location / {
    limit_req zone=mylimit burst=5 nodelay;
    limit_req _log_level error;
    limit_req_status 503;
    ·······
}

step1 定义请求限制空间 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

1. $binary_remote_addr,表明是以remote_addr为限制目标,加上binary是为了压缩内存占用空间

2. zone=name:size,分配一个以name为名的并且大小为size的内存空间,用来存储访问的频次信息

3. rate=nr/s, 如rate=1r/s表示同一个IP每秒只允许一个请求通过。

step2:定义请求限制 limit_req zone=mylimit burst=5 nodelay;

1.zone=mylimit,使用step1定义的空间

2.brust=x,表示设置一个大小为x的缓冲区,超过频次限制的请求先放入这个缓冲区。

3.nodelay,不延迟处理。

        3.1 delay,前delay个不延迟处理,burst-delay的请求延迟处理,超过burst的503. 

        3.2 nodelay/delay都不填,就按照rate,一个个处理,超过brust直接返回503.

2.limit_conn

根据特定的key来限制连接的数量,需要注意的是并不是所有的连接都会被算入其中,只有当一个连接的整个请求头被读取并且已经被nginx服务器处理的时候才会算入限制中。

# 注意 应该在http里面 server 外面 
# $binanry_remote_addr 和$remote_addr 一样 但是 减少空间
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m
server{
    ...
    location / {
       # 同一时段 只有1个IP能访问
       limit_conn conn_zone 1;
    }
}

3.limit_rate

限制用户和服务器之间传输的字节数,最常用的场景可能就是下载/上传限速。

 # 语法配置
 Syntax: limit_rate_after size;
 Default:    limit_rate_after 0;
 Context:    http, server, location, if in location
 This directive appeared in version 0.8.0.
 ​
 # 示例
 location /flv/ {
     flv;
     limit_rate_after 500k;
     limit_rate       50k;
 }

limit_rate的用法非常简单,后面跟随的rate就是具体限速的阈值,限速指令的生效范围是根据每个连接确定的,例如上面限定每个连接的速率为50k,也就是当客户端发起两个连接的时候,速率就可以变为100k

limit_rate_after允许在传输了一部分数据之后再进行限速,例如上面的配置中就是传输的前500kbyte数据不限速,500k之后再进行限速。

limit_rate的一大特点就是能够使用变量,这就意味着和map指令之类的进行组合就可以实现动态限速功能

到此这篇关于nginx限速配置的三种方法(limit_req、limit_conn、limit_rate)的文章就介绍到这了,更多相关nginx限速配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows下Nginx多域名简单配置教程

    windows下Nginx多域名简单配置教程

    这篇文章主要为大家详细介绍了windows下Nginx多域名简单配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • nginx实现数据库端口转发

    nginx实现数据库端口转发

    本文主要介绍了nginx实现数据库端口转发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

    详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

    Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,本篇文章主要介绍了Nginx + Tomcat 反向代理 负载均衡 集群 部署指南,有兴趣的可以了解一下。
    2016-12-12
  • Nginx配合Apache或Tomcat的动静分离基本配置实例

    Nginx配合Apache或Tomcat的动静分离基本配置实例

    这篇文章主要介绍了Nginx配合Apache或Tomcat的动静分离基本配置实例,实际上Nginx专门负责静态和反向代理是主流服务器配置方案,需要的朋友可以参考下
    2016-01-01
  • Nginx 上传大文件超时解决办法

    Nginx 上传大文件超时解决办法

    这篇文章主要介绍了Nginx 上传大文件超时解决办法的相关资料,这里上传文件并设置nginx的配置文件防止超时的情况,需要的朋友可以参考下
    2017-07-07
  • Linux下nginx编译安装教程和编译参数详解

    Linux下nginx编译安装教程和编译参数详解

    这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下
    2014-04-04
  • 同一台服务器安装多个Nginx的方法总结

    同一台服务器安装多个Nginx的方法总结

    在同一台服务器上安装多个nginx完全没有问题,但有些地方是需要注意的,这篇文章为大家整理了一些常会遇到的问题以及解决方法,需要的可以参考一下
    2023-08-08
  • nginx安装第三方模块的方法

    nginx安装第三方模块的方法

    这篇文章主要介绍了nginx安装第三方模块的方法,包含在未安装nginx的情况下安装nginx第三方模块和在已安装nginx情况下安装nginx第三方模块,需要的朋友可以参考下
    2014-06-06
  • nginx反向代理时如何保持长连接

    nginx反向代理时如何保持长连接

    如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短连接发送给服务器端。为了支持长连接,我们需要在nginx服务器上做一些配置。
    2020-10-10
  • Nginx搭建https服务器教程

    Nginx搭建https服务器教程

    这篇文章主要为大家详细介绍了Nginx搭建https服务器教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论