请求限制
用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的
请求数频率限制:限制某个客户端在单位时间内同时访问的Http请求数,由ngx_http_limit_req_module实现。
实测配置:
http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求
cat conf.d/mulu.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
# $binary_remote_addr 基于客户端 IP 进行限制(二进制格式,节省内存)
# zone=req_one:10m 定义共享内存区名称为 req_one,分配 10MB 空间
# rate=1r/s 限制每个 IP 每秒最多 1 个请求server {listen 80;server_name www.jingxiang.com;location / {root /usr/share/nginx/html/jingxiang;index index.html index.htm;}location /centos/ {root /usr/share/nginx/html/jingxiang;allow 10.0.0.0/24;deny all;charset utf-8; autoindex on; autoindex_exact_size off;autoindex_localtime on;limit_req zone=req_one burst=5 nodelay; #burst=5:允许瞬时超 5 个请求(缓解突发流量)。#nodelay:立即处理突发请求,不延迟。}
}
burst与nodelay
通过设置burst参数,可以允许Nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,这起到了平滑流量的作用。但是如果队列设置的比较大,请求排队的时间就会比较长,这对用户很不友好。
有什么解决办法呢?nodelay参数允许请求在排队的时候就立即被处理,也就是说只要请求能够进入burst队列,就会立即被后台worker处理,请注意,这意味着burst设置了nodelay时,系统瞬间的QPS可能会超过rate设置的阈值。
nodelay参数要跟burst一起使用才有作用。
并发连接限制(limit_conn)
并发连接频率限制:限制同一时间的并发数,使用ngx_http_limit_conn_module实现。
http {limit_conn_zone $binary_remote_addr zone=addr:10m;# $binary_remote_addr 基于客户端IP限制,使用二进制格式存储,比字符串节省内存# zone=addr:10m 定义共享内存区,名为addr,分配10MB空间server {location /download/ {limit_conn addr 1;#限制每个客户端IP并发连接为1}}
}
下载速度限制(limit_rate)
下载限速:限制客户端下载资源的速度,使用ngx_http_core_module实现
location /flv/ {flv;limit_rate_after 500k; # 指定了在传输了多少数据之后开始应用 limit_rate 限制limit_rate 50k; # 限制了单个连接的最大下载速率(50KB/s)
}