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 限制.