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;
}
posted @ 2025-03-25 18:15  Linux小飞象  阅读(131)  评论(0)    收藏  举报