限流
限制传输带宽
1、ngx_http_core_module
2、limit_except
(1)解除限制一个 loaction 内的 HTTP 方法
(2)method 参数可以是下列之一:GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK、PATCH
(3)允许 GET 方法,使得 HEAD 方法也被允许
(4)对其他方法的访问,可以通过 ngx_http_access_module、ngx_http_auth_basic_module、ngx_http_auth_jwt_module 模块指令进行限制
(5)请注意,这将限制对除 GET 和 HEAD 以外的所有方法的访问
(6)语法
limit_except method ... { ... }
(7)位置:location
3、limit_rate
(1)限制向客户端传输响应的速率
(2)速率的单位是 bps
(3)零值禁用速率限制
(4)限制是按请求设置的,因此如果一个客户同时打开两个连接,总的速率将是指定限制的两倍
(5)参数值可以包含变量,在速率应该根据某种条件限制的情况下,它可能是有用的
(6)速率限制也可以在 $limit_rate 变量中设置,但是,从 1.17.0 版本开始,不推荐使用这种方法
(7)速率限制也可以在代理服务器响应头的 X-Accel-Limit-Rate 域中设置,可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers、scgi_ignore_headers 指令禁用这一功能
(8)语法
limit_rate rate;
(9)默认值
limit_rate 0;
(10)位置:http、server、location、在 location 中的 if
4、limit_rate_after
(1)设置初始量,在该初始量之后,继续向客户端传输的响应将受到速率限制
(2)语法
limit_rate_after size;
(3)默认值
limit_rate_after 0;
(4)位置:http、server、location、在 location 中的 if
ngx_http_limit_conn_module
1、限制每个定义的密钥的连接数,特别是来自单一 IP 地址的连接数
2、使用计算器算法
3、不是所有的连接都被计算在内,只有当一个连接有一个正在被服务器处理的请求,并且整个请求头已经被读取时,才会被计算在内
4、limit_conn
(1)设置共享内存区和给定键值的最大允许连接数
(2)当超过这个限制时,服务器将在回复请求时返回错误
(3)在同一时间,每个 IP 地址只允许一个连接
(4)在 HTTP/2 和 SPDY 中,每个并发的请求被认为是一个单独的连接
(5)可以同时有几个 limit_conn 指令。例如,下面的配置将限制每个客户IP对服务器的连接数,同时限制对虚拟服务器的总连接数
(6)当前级别上没有定义 limit_conn 指令时,这些指令会从上一个配置级别继承
(7)语法
limit_conn zone number;
(8)位置:http、server、location
ngx_http_limit_req_module
1、限制每个定义的键的请求处理率,特别是限制来自单个 IP 地址的请求的处理率
2、使用漏桶算法
3、limit_req
(1)设置共享内存区域和请求的最大并发数
(2)如果请求率超过为某一区域配置的速率,它们的处理将被延迟,从而使请求以定义的速率被处理
(3)过多的请求会被延迟,直到它们的数量超过最大并发量,在这种情况下,请求会被错误地终止。默认情况下,最大突发事件的大小等于零
(4)如果不希望在限制请求时,延迟过多的请求,应使用参数 nodelay
(5)delay 参数指定了过度请求被延迟的限制,默认值为 0,即所有的过度请求都被延迟
(6)可以同时有几个 limit_req 指令
(7)当前级别没有定义limit_req指令时,这些指令会从上一个配置级别继承
(8)语法
limit_req zone=name [burst=number] [nodelay | delay=number];
(9)位置:http、server、location
4、limit_req_zone
(1)为一个共享内存区设置参数,该共享内存区将为各种键保存状态。该状态存储了当前过度请求的数量。键值可以包含文本、变量以及它们的组合。具有空键值的请求不被计入
(2)如果区的存储空间用完了,最近使用的最少的状态会被删除。如果在这之后仍不能创建新的状态,则请求将以错误结束
(3)速率是以每秒请求数(r/s)为单位,如果希望速率小于每秒一个请求,则以每分钟请求数(r/m)指定
(4)sync 参数使共享内存区的同步化
(5)语法
limit_req_zone key zone=name:size rate=rate [sync];
(6)位置:http
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战