nginx中的限速

zongzw發表於2024-06-10

nginx中的限速分為

  • 限流量(limit_rate)、
  • 限數量(limit_req)、
  • 限連線(limit_conn)

配置

Limit_rate 限制的是某個請求的response速率。不同請求間的response速率不受影響。

配置方法:https://github.com/zongzw-learn/learn-nginx/blob/main/limit/limit_rate.yaml

Limit_req 限制特定相同條件(同一個源地址、伺服器地址等等)下的請求數量。

配置方法:https://github.com/zongzw-learn/learn-nginx/blob/main/limit/limit_req.yaml

Limit_conn 限制特定相同條件(同一個源地址、伺服器地址等等)下的併發連線數。

配置方法:https://github.com/zongzw-learn/learn-nginx/blob/main/limit/limit_conn.yaml

原理

  • 採用漏桶演算法實現流量限制 limit_rate。突發流量被快取起來,excessive 流量則被丟棄掉。
  • 採用令牌桶演算法實現請求限制 limit_req。突發請求burst部分被延遲,更多的部分被丟棄。
  • 使用紅黑樹的方式維持了特定條件下的conn資訊,透過檢索這些條件下的連線數,並比較,實現對單位時間內併發連線的限制,程式碼位置:src/http/modules/ngx_http_limit_conn_module.c:ngx_http_limit_conn_handler

注意

return指令不受limit_req 限制.

相關文章