view xml/cn/docs/http/ngx_http_limit_conn_module.xml @ 2980:c80a7cb452e8

Linux packages: actualized supported Alpine Linux versions.
author Konstantin Pavlov <thresh@nginx.com>
date Fri, 16 Jun 2023 18:53:11 -0700
parents 9934338f83af
children
line wrap: on
line source

<?xml version="1.0"?>

<!--
  Copyright (C) Igor Sysoev
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">

<module name="ngx_http_limit_conn_module 模块"
        link="/cn/docs/http/ngx_http_limit_conn_module.html"
        lang="cn"
        translator="G_will"
        rev="1">

<section id="summary">

<para>
<literal>ngx_http_limit_conn_module</literal> 模块可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。
</para>

<para>
并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。
</para>

</section>


<section id="example" name="配置范例">

<para>
<example>
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }
</example>
</para>

</section>


<section id="directives" name="指令">

<directive name="limit_conn">
<syntax><value>zone</value> <value>number</value></syntax>
<default/>
<context>http</context>
<context>server</context>
<context>location</context>

<para>
指定一块已经设定的共享内存空间,以及每个给定键值的最大连接数。当连接数超过最大连接数时,服务器将会返回
<http-status code="503" text="Service Temporarily Unavailable"/>
错误。比如,如下配置
<example>
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }
</example>
表示,同一 IP 同一时间只允许有一个连接。
</para>

<para>
当多个 <literal>limit_conn</literal> 指令被配置时,所有的连接数限制都会生效。比如,下面配置不仅会限制单一IP来源的连接数,同时也会限制单一虚拟服务器的总连接数:
<example>
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;
}
</example>

</para>

<para>
如果当前配置层级没有<literal>limit_conn</literal>指令,将会从更高层级继承连接限制配置。
</para>

</directive>


<directive name="limit_conn_log_level">
<syntax>
<literal>info</literal> |
<literal>notice</literal> |
<literal>warn</literal> |
<literal>error</literal></syntax>
<default>error</default>
<context>http</context>
<context>server</context>
<context>location</context>
<appeared-in>0.8.18</appeared-in>

<para>
指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。
</para>

</directive>


<directive name="limit_conn_zone">
<syntax>
    <value>$variable</value>
    <literal>zone</literal>=<value>name</value>:<value>size</value></syntax>
<default/>
<context>http</context>

<para>
设定保存各个键的状态的共享内存空间的参数。键的状态中保存了当前连接数。键的值可以是特定变量的任何非空值(空值将不会被考虑)。
使用范例:
<example>
limit_conn_zone $binary_remote_addr zone=addr:10m;
</example>
这里,设置客户端的IP地址作为键。注意,这里使用的是<var>$binary_remote_addr</var>变量,而不是<var>$remote_addr</var>变量。<var>$remote_addr</var>变量的长度为7字节到15字节不等,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。而<var>$binary_remote_addr</var>变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。一兆字节的共享内存空间可以保存3.2万个32位的状态,1.6万个64位的状态。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回
<http-status code="503" text="Service Temporarily Unavailable"/>
错误。
</para>

</directive>


<directive name="limit_zone">
<syntax>
    <value>name</value>
    <value>$variable</value>
    <value>size</value></syntax>
<default/>
<context>http</context>

<para>
这条指令在 1.1.8 版本中已经被废弃,应该使用等效的<link id="limit_conn_zone"/>指令。该指令的语法也有变化:
<note>
<literal>limit_conn_zone</literal>
<value>$variable</value>
<literal>zone</literal>=<value>name</value>:<value>size</value>;
</note>
</para>

</directive>

</section>

</module>