<!-- review: finished -->

<a id="stream-limit-conn"></a>

# Limit Conn

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

<a id="configuration-example-60"></a>

## 配置示例

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

    ...

    server {

        ...

        limit_conn           addr 1;
        limit_conn_log_level error;
    }
}
```

<a id="directives-69"></a>

## 指令

<a id="index-0"></a>

<a id="s-limit-conn"></a>

### limit_conn

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn` zone number;   |
|--------------------------------------------------------------------------------------|-----------------------------|
| 默认                                                                                   | —                           |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream, server              |

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

```nginx
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    ...
    limit_conn addr 1;
}
```

仅允许每个 IP 地址同时有一个连接。

当指定多个 `limit_conn` 指令时，任何配置的限制将适用。

如果当前级别没有定义 `limit_conn` 指令，则这些指令将从前一个配置级别继承。

<a id="index-1"></a>

<a id="s-limit-conn-dry-run"></a>

### limit_conn_dry_run

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_dry_run` `on` | `off`;   |
|--------------------------------------------------------------------------------------|--------------------------------------|
| 默认                                                                                   | `limit_conn_dry_run off;`            |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream, server                       |

启用干运行模式。在此模式下，连接数量没有限制，但是在 [共享内存区域](#s-limit-conn-zone) 中，过量连接的数量仍然会正常计算。

<a id="index-2"></a>

<a id="s-limit-conn-log-level"></a>

### limit_conn_log_level

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_log_level` `info` | `notice` | `warn` | `error`;   |
|--------------------------------------------------------------------------------------|----------------------------------------------------------------|
| 默认                                                                                   | `limit_conn_log_level error;`                                  |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream, server                                                 |

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

<a id="index-3"></a>

<a id="s-limit-conn-zone"></a>

### limit_conn_zone

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `limit_conn_zone` key zone = name:size;   |
|--------------------------------------------------------------------------------------|-------------------------------------------|
| 默认                                                                                   | —                                         |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | stream                                    |

设置共享内存区域的参数，该区域将保存各种键的状态。特别是，状态包括当前连接数。键可以包含文本、变量及其组合。具有空键值的连接不被计算。

使用示例：

```nginx
limit_conn_zone $binary_remote_addr zone=addr:10m;
```

这里，客户端 IP 地址由 `$binary_remote_addr` 变量设置。

对于 IPv4 地址，`$binary_remote_addr` 的大小为 4 字节，对于 IPv6 地址则为 16 字节。在 32 位平台上，存储的状态始终占用 32 或 64 字节，在 64 位平台上占用 64 字节。

一个兆字节的区域可以保存大约 32000 个 32 字节的状态或大约 16000 个 64 字节的状态。如果区域存储耗尽，服务器将关闭连接。

<a id="built-in-variables-19"></a>

## 内置变量

<a id="v-s-limit-conn-status"></a>

### `$limit_conn_status`

保存限制连接数量的结果：`PASSED`,
`REJECTED` 或 `REJECTED_DRY_RUN`
