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

Directives

Syntax:  limit_conn zone number;
Default: —
Context: http, server, location

공유 메모리 영역과 특정 키 값에 대해 허용된 최대 연결 수를 설정합니다. 이 제한을 초과하면 서버가 요청 응답에 오류를 반환합니다. 예를 들어

limit_conn_zone $binary_remote_addr zone=addr:10m;

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

이 명령은 IP 주소 1개당 한 번에 하나의 연결만 허용합니다.

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 명령이 정의되지 않은 경우에만 이전 구성에서 상속합니다.

Syntax:  limit_conn_dry_run on | off;
Default: limit_conn_dry_run off;
Context: http, server, location
This directive appeared in version 1.17.6.

드라이 런 모드를 활성화합니다. 이 모드는 연결 수에 제한이 없습니다. 그러나 다른 경우와 마찬가지로 공유 메모리 영역에서 초과 연결 수를 반영합니다.

Syntax:  limit_conn_log_level info | notice | warn | error;
Default: limit_conn_log_level error;
Context: http, server, location
This directive appeared in version 0.8.18.

서버가 연결 수를 제한하는 경우에 대해 원하는 로깅 수준을 설정합니다.

Syntax:  limit_conn_status code;
Default: limit_conn_status 503;
Context: http, server, location
This directive appeared in version 1.3.15.

거부된 요청에 대한 응답에 반환할 상태 코드를 설정합니다.

Syntax:  limit_conn_zone key zone=name:size;
Default: —
Context: http

여러 가지 키에 대해 상태를 저장할 공유 메모리 영역의 매개변수를 설정합니다. 특히, 상태에는 현재 연결 수가 포함됩니다. key에는 텍스트, 변수 및 그 두 가지 조합을 포함할 수 있습니다. 빈 키값이 포함된 요청은 반영하지 않습니다.

1.7.6버전 이전에는 key에 한 개의 변수만 포함할 수 있었습니다.

사용 예제:

limit_conn_zone $binary_remote_addr zone=addr:10m;

여기에서는 클라이언트 IP 주소가 키 역할을 합니다. $remote_addr 대신, 여기에서 $binary_remote_addr 변수를 사용합니다. $remote_addr 변수의 용량은 7~15바이트 사이입니다. 저장된 상태는 항상 32비트 플랫폼에서 32 또는 64바이트를 차지하고, 64비트 플랫폼에서는 항상 64바이트를 차지합니다. $binary_remote_addr 변수 용량은 IPv4 주소의 경우 항상 4바이트이고, IPv6 주소의 경우 16바이트입니다. 저장된 상태는 항상 32비트 플랫폼에서 32 또는 64바이트를 차지하고, 64비트 플랫폼에서는 64바이트를 차지합니다. 1MB 영역은 32바이트 상태를 약 32,000개 저장할 수 있고, 64바이트 상태는 16,000개를 저장할 수 있습니다. 영역 스토리지를 모두 사용하면 서버가 그 이후의 모든 요청에 대해 오류를 반환합니다.

또한, 상업용 구독에서는 1.17.7 이후로 이러한 각각의 공유 메모리 영역에 대한 상태 정보를 API를 사용하여 가져오거나 재설정할 수 있습니다.

Syntax:  limit_zone name $variable size;
Default: —
Context: 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