当前位置: 首页 > 科技观察

Nginx如何限制访问频率、下载速率、并发连接数

时间:2023-03-15 09:05:16 科技观察

一、用于限制访问频率、并发连接数、下载速度的模块及指令概述ngx_http_limit_req_module:用于限制单位时间内的请求数,即是,速率限制,使用漏桶算法“漏桶”ngx_http_limit_conn_module:用于限制同时连接数,即并发限制limit_rate和limit_rate_after:下载速度设置漏桶算法(leakybucket)算法思路是:水(请求)从上方倒入桶中,从桶底部流出的水(已处理)存储在桶中(缓冲)并以固定速率流出;桶满(丢弃)时水溢出。该算法的核心是:缓存请求,匀速处理,直接丢弃多余的请求。Nginx的请求速率限速模块采用了漏桶算法,可以强制保证请求的实时处理速度不会超过设定的阈值。/s;limit_req_zone$binary_remote_addr$urizone=two:30mrate=20r/s;limit_req_zone$binary_remote_addr$request_urizone=three:30mrate=20r/s;limit_req_status444;...server{...limit_reqzone=twoburst=15nodelay;...}}解释:limit_req_zone$binary_remote_addrzone=one:30mrate=20r/s;$binary_remote_addr是限制同一??个clientip地址到不同的URLzone:zonename一个存储session30Mrate:每秒请求数limit_req_zone$binary_remote_addr$urizone=two:30mrate=20r/s;$binary_remote_addr$uri是限制同一??个clientip地址到同一个URLzone:zonename两个存储session30Mrate:每秒请求数limit_req_zone$binary_remote_addr$request_urizone=three:30mrate=20r/s;$binary_remote_addr$request_uri是限制同一??个clientip地址到同一个URLzone:zonename二店session30Mrate:每秒请求数limit_reqzone=twoburst=15nodelay;zonereferencezone为2,burst设置一个size为15当有大量请求(bursts)时,访问超过上述限制,可以先放到buffer中。Nodelay一般和burst一起使用。如果设置了nodelay,当访问频率超过,缓冲区已满时,会直接返回503。如果设置了,所有大请求都会排队等候。3、并发连接限制情况一:http{...limit_conn_log_levelerror;limit_conn_zone$binary_remote_addrzone=addr:10m;limit_conn_status503;...server{...location/download/{limit_connaddr1;单个客户端IP限制为1}...}情况2:http{limit_conn_zone$binary_remote_addrzone=perip:10m;limit_conn_zone$server_namezone=perserver:10m;server{...limit_connperip10;#单个客户端ip之间的连接数andtheserverlimit_connperserver100;#限制与服务器的总连接数}}四、限制下载速度location/download{limit_rate128k;}#如果要设置用户下载前10m的文件,没有速度limit,大于10m后,可以限速128kb/s。您可以添加以下内容位置/下载{limit_rate_after10m;limit_rate128k;}