模組 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 |
---|---|
預設值 | — |
上下文 |
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 |
---|---|
預設值 |
limit_conn_dry_run off; |
上下文 |
http , server , location |
此指令出現在 1.17.6 版本中。
啟用試執行模式。在此模式下,連線數不受限制,但是,在共享記憶體區域中,多餘的連線數會像往常一樣被計算。
語法 |
limit_conn_log_level |
---|---|
預設值 |
limit_conn_log_level error; |
上下文 |
http , server , location |
此指令出現在 0.8.18 版本中。
設定當伺服器限制連線數時所需的記錄層級。
語法 |
limit_conn_status |
---|---|
預設值 |
limit_conn_status 503; |
上下文 |
http , server , location |
此指令出現在 1.3.15 版本中。
設定在回應遭拒絕的請求時返回的狀態碼。
語法 |
limit_conn_zone |
---|---|
預設值 | — |
上下文 |
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 |
---|---|
預設值 | — |
上下文 |
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