HTTP Limit Requests模块(HTTP Limit Requests)


·摘要

这个模块允许为一个指定的会话或者某个特殊情况限制请求数目。

·示例配置

 http {
    limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;
 
    ...
 
    server {
 
        ...
 
        location /search/ {
            limit_req   zone=one  burst=5;
        }

·指令

语法:limit_req_log_level info|notice|warn|error
默认值:warn
使用字段:http
指定记录日志的等级。

语法:limit_req_zone $session_variable zone=name_of_zone:size rate=rate
默认值:none
使用字段:http
指令描述会话状态存储区域。
指令描述会话状态存储的某个区域,会话的值根据给定的变量,如下例:
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;
在这种情况下,将为一个名为“one”的区域分配10MB,这个区域的平均查询速度为每秒最多1个请求。
会话将追踪每个用户,但是注意它替换了变量$remote_addr,我们使用的是$binary_remote_addr,减少会话的大小为64字节,一个1MB的区域可以包含大约16000个会话状态。
速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 "30r/m"。
当会话状态储存区域为1M时理论上可以处理32000个会话,每个会话大小为32字节。
语法: limit_req zone=zone burst=burst [nodelay]
默认值:none
使用字段:http, server, location
这个指令指定区域(zone)可能的最大请求爆发值(burst),如果其值超过这个数,请求被延时,以便查询按照给定的速度处理。多余的请求将被延迟直到他们的数目小于burst值,在这种情况下,请求将得到"Service unavailable" (503)代码,默认burst的值为0。
如下例:
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;
 
    server {
        location /search/ {
            limit_req   zone=one  burst=5;
        }
允许一个用户平均每秒处理不超过1个请求,这个区域最多同时处理不超过5个查询,如果在burst值之外的额外请求不可用,可以使用nodelay参数:
limit_req   zone=one  burst=5  nodelay;

·参考文档

Nginx Http Limit Requests Module

前进->日志模块(Log)