模組 ngx_http_limit_conn_module

設定範例
指令
     limit_conn
     limit_conn_dry_run
     limit_conn_log_level
     limit_conn_status
     limit_conn_zone
     limit_zone
內嵌變數

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 zone number;
預設值
上下文 http, server, location

設定共享記憶體區域和給定鍵值的最大允許連線數。當超過此限制時,伺服器將在回應請求時返回錯誤。例如,以下指令

limit_conn_zone $binary_remote_addr zone=addr:10m;

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

一次只允許每個 IP 位址一個連線。

在 HTTP/2 和 HTTP/3 中,每個並行請求都被視為一個單獨的連線。

可以有多個 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 on | off;
預設值
limit_conn_dry_run off;
上下文 http, server, location

此指令出現在 1.17.6 版本中。

啟用試執行模式。在此模式下,連線數不受限制,但是,在共享記憶體區域中,多餘的連線數會像往常一樣被計算。

語法 limit_conn_log_level info | notice | warn | error;
預設值
limit_conn_log_level error;
上下文 http, server, location

此指令出現在 0.8.18 版本中。

設定當伺服器限制連線數時所需的記錄層級。

語法 limit_conn_status code;
預設值
limit_conn_status 503;
上下文 http, server, location

此指令出現在 1.3.15 版本中。

設定在回應遭拒絕的請求時返回的狀態碼。

語法 limit_conn_zone key zone=name:size;
預設值
上下文 http

設定共享記憶體區域的參數,該區域將保留各種鍵的狀態。特別是,狀態包括目前的連線數。key 可以包含文字、變數及其組合。具有空鍵值的請求不會被計算。

在 1.7.6 版本之前,key 可以包含一個變數。

使用範例

limit_conn_zone $binary_remote_addr zone=addr:10m;

在此,用戶端 IP 位址作為一個鍵。請注意,這裡使用的是 $binary_remote_addr 變數,而不是 $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 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):PASSEDREJECTEDREJECTED_DRY_RUN