连接限制#

该模块用于按照定义的键限制每个键的连接数,特别是限制来自单个 IP 地址的连接数。

配置示例#

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

    ...

    server {

        ...

        limit_conn           addr 1;
        limit_conn_log_level error;
    }
}

指令#

limit_conn#

语法

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#

语法

limit_conn_dry_run on | off;

默认值

limit_conn_dry_run off;

上下文

stream, server

启用试运行模式。在此模式下,连接数并不限于限制,但在 共享内存区域 中,超额连接数的计算照常进行。

limit_conn_log_level#

语法

limit_conn_log_level info | notice | warn | error;

默认值

limit_conn_log_level error;

上下文

stream, server

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

limit_conn_zone#

语法

limit_conn_zone key zone = name:size;

默认值

上下文

stream

设置用于保存各种键状态的共享内存区域的参数。特别是,状态包含当前连接数。键可以包含文本、变量及其组合。连接的键值为空时不计算在内。

使用示例:

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,000 个 32 字节状态或大约 16,000 个 64 字节状态。如果区域存储被耗尽,服务器将关闭连接。

内置变量#

$limit_conn_status#

保存限制连接数的结果:PASSEDREJECTEDREJECTED_DRY_RUN