Nginx Note
uwupu 啦啦啦啦啦

https://blog.csdn.net/remotesupport/article/details/6016245

https://blog.51cto.com/qiangsh/1765013

限制连接数

limit_zone

1
limit_zone ZONENAME KEY THE_SIZE

定义一个数据区,记录会话状态信息;

  • ZONENAME:zone_name,数据区域的名字;

  • KEY:这里可以是一个变量$variable,是判断会话的变量,唯一指定一个会话的变量;

  • THE_SIZE:the_size,记录区的总容量。

例子

1
limit_zone one $binary_remote_addr 10m

定义一个名为“one”的区域,容量10m,

以变量**$binary_remote_addr为判断会话的基准,即一个地址一个会话**。

$remote_addr长度为7-15bytes,会话信息长度为32-64bytes;

$binary_remote_addr长度为4bytes,会话信息长度为32bytes。

limit_conn

1
limit_conn ZONE_NAME THE_SIZE

指定一个区域会话最大的并发连接数;

当连接数超过指定的并发连接数,会返回503错误;

  • ZONE_NAME:zone_name,区域的名字,由limit_zone定义;
  • THE_SIZE:the_size,允许的并发连接数。

例子

1
2
3
4
5
6
limit_zone one $binary_remote_addr 10m;
server{
location /download/{
limit_conn one 5;
}
}

定义一个名为one的区域,容量为10m(这里容量指的是:10MB),一个地址一个会话;

在/download/目录下,一个会话只能发起5个连接,超过的进行503处理。

limit_conn_zone

位于:http

1
limit_conn_zone KEY zone=NAME:SIZE

定义一个区域:唯一标识一个会话、名字、大小;

  • KEY:这里一般为$binary_remote_addr,唯一标识一个区域会话的变量;$binary_remote_addr即为用一个IP表示一个区域会话

  • NAME:区域的名字;

  • SIZE:大小,单位字节;10m表示10MB。

例子

1
2
3
4
5
6
7
limit_conn_zone $binary_remote_addr zone=addr:10m
server{
location /{
limit_conn addr 5;
limit_rate 100k;
}
}
  • 定义一个区域,名字为addr,判断会话用变量**$binary_remote_addr,区域名字为addr,大小10MB**;
  • location/下面,在名为addr的区域,一个会话允许最大连接数为5,速度限制100K;

limit_conn_log_level

1
2
3
limit_conn_log_level info|notice|warn|error;
Default: limit_conn_log_level error;
Context: http, server, location

当达到最大连接数,记录日志的等级。

limit_conn_status

1
2
3
Syntax: limit_conn_status code;
Default: limit_conn_status 503;
Context: http, server, location

超过限制后,返回的相应状态码,默认503.

案例:根据请求参数限制连接

1
2
3
4
5
6
7
8
9
10
limit_conn_zone $mp_limit_key zone=mp:10m;
server{
set $mp_limit_key $binary_remote_addr; # 为key设置默认值
if ( $query_string ~ .*mp=(\d+).* ){
set $mp_limit_key $1;
}
location /{
limit_conn mp 10;
}
}

依据**$mp_limit_key**定义一个会话,区域名为mp,限制大小10MB;

使用正则表达式.*mp=(\d+).*取出参数mp并设置值到mp_limit_key

限制连接数为10。

Variable

$binary_remote_addr和$remote_addr

$remote_addr长度为7-15bytes;

$binary_remote_addr长度为4bytes。

都是客户端地址;

$server_name

上游服务器的地址;

$query_string

请求连接的地址;

比如:https://www.baidu.com/s?&wd=qwe

 评论