HttpLimitReqest模块

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

示例配置

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

指令

语法:limit_req_log_level info|notice|warn|error

默认值:warn

使用字段:http

指定记录日志的等级。

语法:limit_req_zone $session_variable zone=name_of_zone:size rate=rate

默认值:none

使用字段:http

指令描述会话状态存储区域。

指令描述会话状态存储的某个区域,会话的值根据给定的变量,如下例:

  1. 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。

如下例:

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

允许一个用户平均每秒处理不超过1个请求,这个区域最多同时处理不超过5个查询,如果在burst值之外的额外请求不可用,可以使用nodelay参数:

  1. limit_req zone=one burst=5 nodelay;