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 Rewrite使用场景及配置方法解析

    Nginx Rewrite使用场景及配置方法解析

    这篇文章主要介绍了Nginx Rewrite使用场景及配置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • nginx的安装以及简单配置教程

    nginx的安装以及简单配置教程

    这篇文章主要给大家介绍了关于nginx的安装以及简单配置的相关资料,以下是nginx在各种环境条件下的安装与配置过程,其中还分析了中间遇到的坑以及处理方式,需要的朋友可以参考下
    2023-08-08
  • 将树莓派转身为强大的Web服务器如何使用Nginx和cpolar实现远程访问

    将树莓派转身为强大的Web服务器如何使用Nginx和cpolar实现远程访问

    这篇文章主要介绍了Nginx可视化管理工具结合cpolar实现远程访问内网服务,相比其他 Web 服务器,Nginx 的内存占用率非常低,可以在树莓派等资源受限的设备上运行,同时结合cpolar 内网穿透工具即可实现远程访问,需要的朋友可以参考下
    2023-09-09
  • Nginx配置支持ThinkPHP的PATH_INFO

    Nginx配置支持ThinkPHP的PATH_INFO

    这篇文章主要介绍了Nginx配置支持ThinkPHP的PATH_INFO,本文在Ubuntu的开发环境加配置成功,需要的朋友可以参考下
    2015-07-07
  • nginx中一个请求的count计数跟踪浅析

    nginx中一个请求的count计数跟踪浅析

    这篇文章主要给大家介绍了关于nginx中一个请求的count计数跟踪的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • 详解nginx实现ssl反向代理实战

    详解nginx实现ssl反向代理实战

    本篇文章主要介绍了nginx实现ssl反向代理实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Nginx防止直接用IP访问Web服务器的设置方法

    Nginx防止直接用IP访问Web服务器的设置方法

    看了很多Nginx的配置,好像都忽略了ip直接访问Web的问题,这样理论上不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面
    2012-09-09
  • Nginx+Tomcat+Https 服务器负载均衡配置实践方案详解

    Nginx+Tomcat+Https 服务器负载均衡配置实践方案详解

    这篇文章主要介绍了Nginx+Tomcat+Https 服务器负载均衡配置实践方案的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Nginx(PHP/fastcgi)的PATH_INFO问题

    Nginx(PHP/fastcgi)的PATH_INFO问题

    PATH_INFO是一个CGI 1.1的标准,经常用来做为传参载体. 比如, 我们可以使用PATH_INFO来代替Rewrite来实现伪静态页面, 另外不少PHP框架也使用PATH_INFO来作为路由载体.
    2011-08-08
  • 详解Nginx反向代理WebSocket响应403的解决办法

    详解Nginx反向代理WebSocket响应403的解决办法

    本篇文章主要介绍了详解Nginx反向代理WebSocket响应403的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论