模块 ngx_stream_limit_conn_module

示例配置
指令
     limit_conn
     limit_conn_dry_run
     limit_conn_log_level
     limit_conn_zone
内嵌变量

模块 ngx_stream_limit_conn_module(1.9.3 版本)用于限制每个定义的键的连接数,特别是来自单个 IP 地址的连接数。

示例配置

stream {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        limit_conn           addr 1;
        limit_conn_log_level error;
    }
}

指令

语法: limit_conn zone number;
默认:
上下文: stream, server

设置共享内存区域和给定键值的最大允许连接数。当超过此限制时,服务器将关闭连接。例如,指令

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    ...
    limit_conn addr 1;
}

每次仅允许一个 IP 地址的连接。

当指定了多个 limit_conn 指令时,任何配置的限制都将适用。

如果且仅如果在当前级别上未定义 limit_conn 指令,则从上一个配置级别继承这些指令。

语法: limit_conn_dry_run on | off;
默认:
limit_conn_dry_run off;
上下文: stream, server

此指令出现在版本 1.17.6 中。

启用干预运行模式。在此模式下,连接数不受限制,但是在共享内存区域中,过多的连接数会像往常一样被计算。

语法: limit_conn_log_level info | notice | warn | error;
默认:
limit_conn_log_level error;
上下文: stream, server

设置服务器限制连接数时所需的日志记录级别。

语法: limit_conn_zone key zone=name:size;
默认:
上下文: stream

设置一个共享内存区域的参数,该区域将保留各种键的状态。特别是,状态包括当前连接数。 key 可以包含文本、变量及其组合(1.11.2)。空键值的连接不会被计算。用法示例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

在这里,关键是由$binary_remote_addr变量设置的客户端IP地址。对于IPv4地址,$binary_remote_addr的大小为4字节,对于IPv6地址,大小为16字节。存储的状态始终在32位平台上占用32或64字节,在64位平台上占用64字节。一个兆字节的区域可以保持约32千个32字节状态或约16千个64字节状态。如果区域存储耗尽,服务器将关闭连接。

另外,作为我们的商业订阅的一部分,自1.17.7版起,可以使用API获取或重置每个共享内存区域的状态信息

内嵌变量

$limit_conn_status
保持连接数限制结果(1.17.6):PASSEDREJECTEDREJECTED_DRY_RUN