Nginx對網段內ip的連接數限流如何配置

nginx中的所謂連接數限制,其實是tcp連接,也就是請求方通過三次握手后成功建立的連接狀態。nginx一般為我們提供了 ngx_http_limit_conn_module 模塊來提供限制連接功能。該模塊可以根據定義的鍵來限制每個鍵值的連接數,如同一個ip來源的連接數。

ngx_http_limit_conn_module指令解釋

syntax:??limit_conn?zone?number; default:??— context:??http,?server,?location

該指令描述會話狀態存儲區域。鍵的狀態中保存了當前連接數,鍵的值可以是特定變量的任何非空值(空值將不會被考慮)。$variable定義鍵,zone=name定義區域名稱。 常見使用例子:

limit_conn_zone?$binary_remote_addr?zone=addr:10m;  server?{ ??location?/download/?{ ????limit_conn?addr?1; ??}

上面例子表示當請求訪問 /download/ 時, 同一時刻只能一個請求連接會成功進行資源下載。

網段限制

常見的limit_conn_zone 配置一般設置 $binary_remote_addr 或 $server_name,進行單一ip或主機級的連接數限制。

但有時候我們希望能對某ip網段進行連接數限制,那我們可以這么做:

http?{  ...?...  ??limit_conn_zone?$ip_segment?zone=network_segment:10m;  ??server?{ ??????...?... ??????set?$ip_segment?$remote_addr;  ??????if?(?$ip_segment?~?^(d+).(d+).(d+).(d+)?)?{ ????????set?$ip_segment?$1.$2.$3; ??????}  ??????location?/download/?{ ????????limit_conn?network_segment?10;? ????????#limit_rate?200k; ??????}  ??} }

這樣基本能滿足nginx對網段內所有ip的連接數做統一的連接數限制了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享