Nginx 限速三剑客之 limit_conn
Limit_conn 介绍
limit_conn 是限制单个IP在单位时间内请求连接数的工具。
粗看类似limit_req,两者在理解上确有相似之处,都是针对单个IP地址的,目的都是为了通过配置限制来保护资源的;
实际两者在使用场景上是不同的,limit_req是限制请求速率的(无状态连接),limit_conn是限制并发的(有状态连接)
配置方法
Limit_conn 可在http,server及location中进行配置。
安装方法
Limit_conn 是ngx_http_limit_conn_module模块提供的功能,该模块为默认安装。
[root@db nginx-1.26.3]# ./configure --help |grep limit_conn
--without-http_limit_conn_module disable ngx_http_limit_conn_module
--without-stream_limit_conn_module disable ngx_stream_limit_conn_module
使用方法
# 定义zone:zone的key定义为二进制的remote_addr(即客户端地址),zone名称为addr,申请的内存大小为10兆(存放key用)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
# 限制每个客户端地址在同一时间内只能保持一个连接
limit_conn addr 1;
limit_conn_status 503;
}
与limit_req不同的是,如一个客户端与Nginx在一段时间内其连接始终保持活跃,则后续超过限制数量的连接无法被处理;而limit_req,你请求时间间隔只要超过限制值,则可以创建无数连接,不管这个连接属于长连接还是短连接。
limit_conn和limit_req灵台一个不同点是,它没有burst和delay配置。limit_conn_status使用方法与limit_req相同。
延伸
限制虚拟server总并发
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;
}
本文来自博客园,作者:Linux小飞象,转载请注明原文链接:https://www.cnblogs.com/linux-xiaofeixiang/p/18792035

浙公网安备 33010602011771号