nginx请求限制、并发限制、限速详解

请求限制

用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的

请求数频率限制:限制某个客户端在单位时间内同时访问的Http请求数,由ngx_http_limit_req_module实现。

实测配置:
http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求

cat jingxiang.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  jingxiang.zqfstack.com;
        location / {
                root /data/jingxiang;
                index  index.html index.htm;

        }

        location /centos/ {
                root /data/jingxiang;
                charset utf-8;
                autoindex on; #开启目录游览功能
                autoindex_exact_size off;  #显示大小
                autoindex_localtime on;   #显示时间
                limit_req zone=req_one burst=5 nodelay;
                # burst=5:允许瞬时超 5 个请求(缓解突发流量)。
                # nodelay:立即处理突发请求,不延迟。
        }
}

效果:如果用户 1 秒内连续访问 6 次,第 1-5 个请求:正常处理。第 6 个请求:返回 503 Service Temporarily Unavailable。

burst与nodelay

通过设置burst参数,可以允许Nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,这起到了平滑流量的作用。但是如果队列设置的比较大,请求排队的时间就会比较长,这对用户很不友好。

有什么解决办法呢?nodelay参数允许请求在排队的时候就立即被处理,也就是说只要请求能够进入burst队列,就会立即被后台worker处理,请注意,这意味着burst设置了nodelay时,系统瞬间的QPS可能会超过rate设置的阈值。

nodelay参数要跟burst一起使用才有作用。

并发连接限制(limit_conn)

并发连接频率限制:限制同一时间的并发数,使用ngx_http_limit_conn_module实现。

cat jingxiang.conf
limit_conn_zone $binary_remote_addr zone=addr:10m;
# $binary_remote_addr  基于客户端IP限制,使用二进制格式存储,比字符串节省内存
# zone=addr:10m  定义共享内存区,名为addr,分配10MB空间

server {
        listen       80;
        server_name  jingxiang.zqfstack.com;
        location / {
                root /data/jingxiang;
                index  index.html index.htm;

        }

        location /centos/ {
                root /data/jingxiang;
                charset utf-8;
                autoindex on; #开启目录游览功能
                autoindex_exact_size off;  #显示大小
                autoindex_localtime on;   #显示时间
                limit_conn addr 1; # 限制每个客户端IP并发连接为1
        }
}

效果:限制每个 IP 的并发连接数:同一时间最多 1 个连接(limit_conn addr 1)。超出限制的连接会被拒绝(返回 503)。

下载速度限制(limit_rate)

下载限速:限制客户端下载资源的速度,使用ngx_http_core_module实现

cat  jingxiang.conf
server {
        listen       80;
        server_name  jingxiang.zqfstack.com;
        location / {
                root /data/jingxiang;
                index  index.html index.htm;

        }

        location /centos/ {
                root /data/jingxiang;
                charset utf-8;
                autoindex on; #开启目录游览功能
                autoindex_exact_size off;  #显示大小
                autoindex_localtime on;   #显示时间
                limit_rate_after 500k;   # 指定了在传输了多少数据之后开始应用 limit_rate 限制
                limit_rate       50k;    # 限制了单个连接的最大下载速率(50KB/s)
        }
}
posted @ 2025-08-14 19:04  阿峰博客站  阅读(39)  评论(0)    收藏  举报