概述
模块名:ngx_http_limit_req_module
ngx_http_limit_req_module
模块用于限制每个定义的键的请求处理率,特别是来自单个 IP 地址的请求的处理率。限制是使用“漏桶”方法完成的。
漏桶算法
漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。
在网络中,漏桶算法可以控制端口的流量输出速率,平滑网络上的突发流量,实现流量整形,从而为网络提供一个稳定的流量。
示例
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
指令
语法 | 默认值 | Context | 注解 |
limit_req zone=name [burst=number] [nodelay | delay=number] | — | http, server,location | 设置共享内存区域和请求的最大突发大小。如果请求速率超过为区域配置的速率,则它们的处理将被延迟,以便以定义的速率处理请求。过多的请求会被延迟,直到它们的数量超过最大突发大小,在这种情况下,请求会因错误而终止 。默认情况下,最大突发大小为零。 |
limit_req_dry_run on | off | limit_req_dry_run off | http, server,location | 该指令出现在 1.17.1 版中。 启用试运行模式。在这种模式下,请求处理速率不受限制,但是在共享内存区域中,过度请求的数量照常计算。 |
limit_req_log_level info | notice | warn | error | limit_req_log_level 错误 | http, server,location | 该指令出现在 0.8.18 版本中。 当服务器由于速率超过或延迟请求处理而拒绝处理请求时,设置所需的日志记录级别。延迟的记录级别比拒绝低一分;例如,如果limit_req_log_level notice指定了“ ”,则延迟与info级别一起记录。 |
limit_req_status code | limit_req_status 503 | http, server,location | 该指令出现在 1.3.15 版中。 设置状态代码以响应被拒绝的请求。 |
limit_req_zone key zone=name:size rate=rate [sync] | — | http | 为共享内存区域设置参数,该区域将保持各种键的状态。特别是,状态存储了当前的过度请求数。该key可以包含文本,变量,他们的组合。不考虑具有空键值的请求。 |
参考文档
Module ngx_http_limit_req_modulehttp://nginx.org/en/docs/http/ngx_http_limit_req_module.html