nginx 限速之limit_conn的使用

 更新时间:2023年10月24日 11:21:20   作者:木华思流年  
通过nginx我们有三种限速方式分别是: 限制请求数(request),限制连接数(connection),限制响应速度(rate),本文就来介绍一下nginx 限速之limit_conn的使用,ngx_http_limit_conn_module 模块主要是用于根据特定的key来限制连接的数量,感兴趣的可以了解一下

在工作中经常会遇到用户大量请求某个接口和一些大流量的恶意攻击,可以通过nginx对同一个ip的连接数,请求,进行限制.

通过nginx我们有三种限速方式分别是: 限制请求数(request),限制连接数(connection),限制响应速度(rate),分别对应nginx的limit_req,limit_conn和limit_rate三个模块,limit_conn和limit_req模块类似,有许多指令组成一个大的模块,两个模块之间很多指令的命名方式和用法大同小异.

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

1. ngx_http_limit_conn_module模块

1. limit_conn_zone 指令

#语法配置
Syntax: limit_conn_zone key zone=name:size;
Defaule: -
Context: http  #作用域

limit_conn_zone $binary_remote_addr zone=${name}:10m #示例

说明:

  •  limit_conn_zone:  只能够在http块用使用
  •  key: 可以设置为$variable使用Nginx内置变量作为键(一般经常使用客户端ip地址作为键:$remote_addr变量的长度为7字节到15字节,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。)$binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态)。zone=name定义区域名称(名称随意起,在limit_conn配置项中调用时对应就好),size定义各个键共享内存空间大小。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。
  • name: 就是这个zone的命名,name需要全局唯一,limit_conn 命令根据name来查找对应zone进行相应限制规则的匹配.
  • size:  定义这个zone的大小,也就是nginx会在内存中开辟多大的空间来存储这个zone的相应信息,主要和前面定义的key的大小有关系,需要注意的是当内存带下耗尽的时候,nginx会直接返回错误码limit_conn_status给后续的请求(If the zone storage is exhausted, the server will return the error to all further requests.)

2. limit_conn指令

Syntax:  limit_conn zone number;  #语法
Default:
Context: http,server,location  #作用域

说明:

  • limit_conn: 使用由limit_conn_zone定义的拦截规则,并设置具体的限制连接数量,当超过这个数字时返回503(server)的错误.定义的存储区域key对应的总的网络连接数进行限流。可以按照IP来限制IP维度的总连接数,或者按照服务域名来限制某个域名的总的连接数(只有那些被nginx处理的且已经读取了整个请求头的请求连接才会被计数器统计,在http,server,location三个块中使用,但是要搭配limit_conn_zone使用
  • zone: 是在limit_conn_zone中的name变量,对应这全局唯一的zone,负责确定限制连接数的依据
  • number: 限制的连接数,zone和number组合就可以完成连接数的限定功能,注意number必须是数字而不能使用变量.

示例:

 limit_conn_zone $binary_remote_addr zone=addr:10m;
 ​
 server {
     location /download/ {
         limit_conn addr 1;
     }

3. limit_conn_log_level指令

Syntax:	limit_conn_log_level  info|notice|warn|error  #语法
Default:    limit_conn_log_level error;   #默认
Context:	http, server, location  #作用域

功能: 当达到最大限制规则的连接数后,记录日志的等级。会输出到error.log中而不是access.log,调成info的话会有较多的日志输出,需要额外注意硬盘容量等相关问题。

4.limit_conn_status指令

Syntax:	limit_conn_status code
Context:	http, server, location
Default:	limit_conn_status 503

功能:当超过限制规则后,返回的响应状态码,默认是503,如果是一些有特殊需求的场景,可以手动调整为403之类的状态码,需要注意的是并不是所有的状态码都可以使用,nginx官方限定状态码必须在400到599之间。

5.limit_conn_dry_run指令

 Syntax: limit_conn_dry_run on | off;
 Default:    limit_conn_dry_run off;
 Context:    http, server, location
 This directive appeared in version 1.17.6.

功能: dry_run模式的意义在于试运行而不对线上业务造成影响。设置为on之后,前面的limit_conn指令并不会真正生效,但是limit_conn_zone指令会生效,nginx会在内存中存储计算相关的数据.

到此这篇关于nginx 限速之limit_conn的使用的文章就介绍到这了,更多相关nginx limit_conn内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于nginx获取代理服务ip以及客户端真实ip详解

    基于nginx获取代理服务ip以及客户端真实ip详解

    最近在研究nginx中如何获取真实客户端IP的方法,下面这篇文章主要给大家介绍了基于nginx获取代理服务ip以及客户端真实ip的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Ubuntu环境下安装部署Nginx详细步骤(有网)

    Ubuntu环境下安装部署Nginx详细步骤(有网)

    Nginx是一个开源的 HTTP 网络服务器,下面这篇文章主要给大家介绍了关于Ubuntu环境下安装部署Nginx(有网)的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • nginx http响应限速的具体实现

    nginx http响应限速的具体实现

    本文主要介绍了nginx http响应限速的具体实现,可以使用limite_rate和limit_rate_after来限制HTTP响应的速度,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 前端必备Nginx配置详解

    前端必备Nginx配置详解

    这篇文章主要介绍了前端必备Nginx配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • nginx+tomcat实现Windows系统下的负载均衡搭建教程

    nginx+tomcat实现Windows系统下的负载均衡搭建教程

    下面小编就为大家分享一篇nginx+tomcat实现Windows系统下的负载均衡搭建教程,具有很好的参考价值,希望对大家有所帮助
    2017-12-12
  • 为什么 Nginx 比 Apache 更牛

    为什么 Nginx 比 Apache 更牛

    为什么Nginx在处理高并发方面要优于httpd,我们先从两种web服务器的工作原理以及工作模式说起。对Nginx对比 Apache的相关知识感兴趣的朋友跟随小编一起看看吧
    2021-02-02
  • 总结Nginx 的使用过程中遇到的问题及解决方案

    总结Nginx 的使用过程中遇到的问题及解决方案

    这篇文章主要总结了Nginx 的使用过程中遇到的问题及解决方案,非常的简单实用,以后遇到相关问题还会继续更新,希望大家收藏关注
    2014-10-10
  • Nginx 流量镜像使用的方法示例

    Nginx 流量镜像使用的方法示例

    Nginx流量镜像技术可以在不影响原始请求的情况下复制请求数据,用于数据分析、安全监控等方面,本文就来介绍一下Nginx 流量镜像使用的方法示例,感兴趣的可以了解一下
    2024-10-10
  • 若依部署Nginx和Tomcat全过程

    若依部署Nginx和Tomcat全过程

    文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署包括前端打包、将文件拉到webapps目录、访问测试等步骤,文章还解决了前后端无法通信和404问题
    2024-12-12
  • Linux中Nginx的防盗链和优化的实现代码

    Linux中Nginx的防盗链和优化的实现代码

    今天是周末小编在值班哈,很开森,工作使我快乐,本文重点给大家介绍Linux中Nginx的防盗链和优化问题及实现代码,需要的朋友跟随小编一起看看吧
    2021-06-06

最新评论