nginx中文文档-ngx_http_limit_req_module

ngx_http_limit_req_module模块(0.7.21+)用于限制定义关键字的请求处理速率,尤其是处理来自于单一IP地址的请求的速率。限制使用“漏桶算法”。

示例配置

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    ...

    server {

        ...

        location /search/ {
            limit_req zone=one burst=5;
        }

limit_req

语法:limit_req zone=name [burst=number] [nodelay]
默认:—
上下文:http, server, location

设置共享内存区域和最大请求爆发大小。如果请求速率超过一个区域的配置速率,将延迟处理该请求以达到定义的速率。过多的请求会被延迟,直到达到最大的爆发大小,这时请求会响应为503错误码。默认情况下,最大的爆发大小为0。例如,指令

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    location /search/ {
        limit_req zone=one burst=5;
    }

允许平均1秒钟不超过1个请求,爆发最多不超过5。
如果不希望超过限制的请求被延迟,应该使用nodelay参数:
limit_req zone=one burst=5 nodelay;
可以由多个limit_req指令。例如,下面的配置将会限制单个IP地址的请求速率和虚拟主机请求的速率:

limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;

server {
    ...
    limit_req zone=perip burst=5 nodelay;
    limit_req zone=perserver burst=10;
}

当且仅当本级别没有limit_req指令时,指令会从上级中继承。

limit_req_log_level

语法:limit_req_log_level info | notice | warn | error
默认:limit_req_log_level error
上下文:http, server, location
版本:0.8.18+

设置当由于超速或延迟问题拒绝处理请求时系统记录日志的级别。如果定义了“limit_req_log_level notice”延迟会记录到info级别中。

limit_req_status

语法:limit_req_status code
默认:limit_req_status 503
上下文:http, server, location
版本:1.3.15+

设置拒绝请求是的返回错误码。

limit_req_zone

语法:limit_req_zone key zone=name:size rate=rate
默认:—
上下文:http

设置将要为各种关键字保存状态的共享内存参数。状态存储了过多的请求数目。key可以包含文本、变量和组合。空键值的请求不会被记录。
在1.7.6版本之前,key只能包含一个变量。
示例用法:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
这里,状态保存在10M的区域“one”中。这个区域1秒处理的请求不超过1个。
一个客户端IP地址视为一个关键字。注意,这里使用$binary_remote_addr变量替代了$remote_addr变量,将状态的大小降低到64字节。1M的区域可以保留16,000个64字节状态。如果存储空间耗尽,服务器将会对后来的请求返回503错误码。
速率定义为请求/秒(r/s)。如果希望请求速率低于1r/s可以定义为请求/分(r/m)。例如每秒钟半个请求即30r/m。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

请开启浏览器JavaScript