ngx_http_limit_conn_module 模块

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

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

示例配置

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 1;
        }

指令

limit_conn 指令

语 法:limit_conn zone number;
默认值:—
上下文:http, server, location

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

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    location /download/ {
        limit_conn addr 1;
    }

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

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

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

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

当且仅当在当前级别上没有定义LIMIT_CONN指令时,才会从上一个配置级别继承这些指令。

limit_conn_dry_run 指令

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

该指令出现在 1.17.6 版中。

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

limit_conn_log_level 指令

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

该指令出现在 0.8.18 版本中。

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

limit_conn_status 指令

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

该指令出现在 1.3.15 版中。

设置状态代码以响应被拒绝的请求。

limit_conn_zone 指令

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

设置共享内存区的参数,该参数将保留各种键的状态。具体地说,该状态包括当前的连接数量。键可以包含文本、变量及其组合。键值为空的请求不会被计算在内。

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

用法示例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

这里,客户端IP地址用作密钥。请注意,这里使用的不是$REMOTE_ADDR,而是$BINARY_REMOTE_ADDR变量。$REMOTE_ADDR变量的大小可以从7个字节到15个字节不等。存储状态在32位平台上占用32或64字节内存,在64位平台上始终占用64字节内存。对于IPv4地址,$BINARY_REMOTE_ADDR变量的大小始终为4字节,对于IPv6地址,其大小始终为16字节。存储状态在32位平台上始终占用32或64字节,在64位平台上始终占用64字节。一个兆字节区可以保持大约32,000个32字节的状态或大约16,000个64字节的状态。如果区域存储耗尽,服务器将向所有其他请求返回错误。

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

limit_zone 指令

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

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

limit_conn_zone $variable zone=name:size;

内嵌变量

$limit_conn_status

保持限制连接数的结果 (1.17.6):PASSED、REJECTED 或 REJECTED_DRY_RUN

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号