模块 ngx_http_limit_conn_module


limit_conn
limit_conn_dry_run
limit_conn_log_level
limit_conn_status
limit_zone
嵌入变量limit_conn_zone
的示例配置Directives

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

并非所有连接都被计算在内。 仅当连接具有服务器正在处理的请求时,才会对连接进行计数 并且整个请求标头已被读取。

示例配置

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

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }

Directives

语法: limit_conn zone number;
默认值:
上下文: http, ,serverlocation

设置共享内存区域 以及给定键值允许的最大连接数。 超过此限制时,服务器将返回错误以响应请求。 例如,Directives

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }

一次只允许每个 IP 地址有一个连接。

在 HTTP/2 和 HTTP/3 中, 每个并发请求都被视为一个单独的连接。

可能有多个Directives。 例如,以下配置将限制数量 每个客户端 IP 到服务器的连接数,同时, 与虚拟服务器的连接总数:limit_conn

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;
}

这些Directives继承自之前的配置级别 当且仅当没有Directives时 在当前级别上定义。limit_conn

语法: limit_conn_dry_run on | off;
默认值:
limit_conn_dry_run off;
上下文: http, ,serverlocation

该Directives出现在版本 1.17.6 中。

启用试运行模式。 在此模式下,连接数不受限制,但是, 在共享内存区中,将计算过多连接的数量 照常。

语法: limit_conn_log_level info | notice | warn | error;
默认值:
limit_conn_log_level error;
上下文: http, ,serverlocation

该Directives出现在版本 0.8.18 中。

为服务器 限制连接数。

语法: limit_conn_status code;
默认值:
limit_conn_status 503;
上下文: http, ,serverlocation

该Directives出现在版本 1.3.15 中。

将状态代码设置为响应被拒绝的请求而返回。

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

设置共享内存区域的参数 这将保留各种 key 的状态。 具体而言,该状态包括当前连接数。 可以包含文本、变量及其组合。 不考虑具有空 key 值的请求。key

在 1.7.6 版本之前, a 可以只包含一个变量。key

使用示例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

在这里,客户端 IP 地址用作键。 请注意,此处使用的变量不是 。 变量的大小可以 从 7 到 15 字节不等。 stored 状态占据 在 32 位平台上为 32 或 64 字节内存,始终为 64 字节 字节。 变量的大小 对于 IPv4 地址,始终为 4 字节,对于 IPv6 地址,始终为 16 字节。 stored 状态始终占用 32 或 64 字节 在 32 位平台上为 64 字节,在 64 位平台上为 64 字节。 1 MB 区域可以保留大约 32,000 个 32 字节的状态 或大约 16,000 个 64 字节的状态。 如果区域存储已用尽,服务器会将错误返回给所有进一步的请求。$remote_addr$binary_remote_addr$remote_addr$binary_remote_addr

此外,作为我们商业订阅的一部分, 从 1.17.7 开始,可以使用 API 获取重置每个此类共享内存区域的状态信息

语法: limit_zone name $variable size;
默认值:
上下文: http

该Directives在 1.1.8 版中已过时 ,并在版本 1.7.6 中删除。 等效的 limit_conn_zone Directives 应该改用更改的语法:

limit_conn_zone $variable zone=name:size;

嵌入变量

$limit_conn_status
保留限制连接数的结果 (1.17.6):、 、 或PASSEDREJECTEDREJECTED_DRY_RUN