如今的 http 协议支持在一次链接上创建屡次请求,因而就有了请求限制和链接限制
http1.1 支持顺序性 tcp 复用,到了2.0支持多路tcp复用。html
配置语法:node
Syntax: limit_conn_zone key zone=name:size;
Default: -
Context: http
复制代码
Syntax: limit_conn name number;
Default: -
Context: http,server,location
复制代码
示例:bash
http {
...
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
// conn_zone 是自定义的变量
// $binary_remtoe_addr 表示客户端地址,放在这里表示经过客户端地址限制请求次数。$binary_remote_addr 比 $remote_addr 节省空间。
server {
...
limit_conn conn_zone 1;
// 限制同一个 IP 同时只能有一个链接。
// 同时只能有一个链接的意思不是同时只能有一个请求,一个链接能够有多个请求
location / {
root html;
index index.html index.htm;
}
}
}
复制代码
配置语法:tcp
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: -
Context:http
复制代码
Syntax: limit_req zone=name [burst=number][nodelay];
Default: -
Context: http,server,location
复制代码
示例:spa
http {
...
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
// 表示对同一个 IP 限制每秒请求一次。
// $binary_remtoe_addr 表示客户端地址,放在这里表示经过客户端地址限制请求次数。$binary_remote_addr 比 $remote_addr 节省空间。
// 1m 表示 zone 的大小
// zone=req_zone 表示 zone 的名字
// rate=1r/s 表示每秒一次请求
server {
...
limit_req zone=req_zone;
// 在这个 server 下的全部 location 使用 req_one 的限制,每秒只能请求一次。
limit_req zone=req_zone burst=3 nodelay;
// burst=3 表示达到限制以后有3个会到下一秒执行,对客户端访问限速
// nodelay 是不等待直接返回 503 等
location / {
root html;
index index.html index.htm;
}
}
}
复制代码