- limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//$binary_remote_addr 表示通过remote_addr这个标识来做限制,"binary_"的目的是缩写内存占用量,是限制同一客户端ip地址。
//zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。
//rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。
limit_req zone=one burst=5 nodelay;
//zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
//burst=5,设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
//nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
//例:
http {
limit_req_zone $binary_remote_addr zone = one: 10 m rate = 1 r / s;
server {
location / search / {
limit_req zone = one burst = 5 nodelay;
}
}
}
// 下面配置可以限制特定UA(比如搜索引擎)的访问
http{
limit_req_zone $anti_spider zone = one: 10 m rate = 10 r / s;
limit_req zone = one burst = 100 nodelay;
if ($http_user_agent~ * "googlebot|bingbot|Feedfetcher-Google") {
set $anti_spider $http_user_agent;
}
}
其他参数:
Syntax: limit_req_log_level info | notice | warn | error;
Default: limit_req_log_level error;
Context: http, server, location
//设置你所希望的日志级别,当服务器因为频率过高拒绝或者延迟处理请求时可以记下相应级别的日志。 延迟记录的日志级别比拒绝的低一个级别;比如, 如果设置"limit_req_log_level notice", 延迟的日志就是info级别。
Syntax: limit_req_status code;
Default: limit_req_status 503;
Context: http, server, location
//设置拒绝请求的返回值 在400~599之间。
- limit_req_conn 用来限制单个IP的请求数。并非所有的连接都被计数。只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context:
// 注: key的值为$binary_remote_addr 而不是 $ remote_addr;参考官方文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
// 一次只允许每个IP地址一个连接
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
}
//限制每个客户端IP连接到服务器的数量 为 10,同时限制连接到虚拟服务器的总数 为100
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10;
limit_conn perserver 100;
}
其他配置:
// 当服务器限制连接数时,设置所需的日志记录级别
Syntax: limit_conn_log_level info | notice | warn | error;
Default: limit_conn_log_level error;
Context: http, server, location
// 设置状态代码以响应被拒绝的请求而返回
Syntax: limit_conn_status code;
Default: limit_conn_status 503;
Context: http, server, location
Original: https://www.cnblogs.com/zhuchenglin/p/12741299.html
Author: lin_zone
Title: Nginx 限流配置
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543543/
转载文章受原作者版权保护。转载请注明原作者出处!