nginx如何限制併發連線請求數?
阿新 • • 發佈:2020-09-04
# 簡介
限制併發連線數的模組為:**http_limit_conn_module**,地址:[http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html](http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html)
限制併發請求數的模組為:**http_limit_req_module**,地址:[http://nginx.org/en/docs/http/ngx_http_limit_req_module.html](http://nginx.org/en/docs/http/ngx_http_limit_req_module.html)
這兩個模組都是預設編譯進Nginx中的。
# 限制併發連線數
示例配置:
```nginx
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
#limit_conn_zone $server_name zone=perserver:10m;
server {
limit_conn addr 1;
limit_conn_log_level warn;
limit_conn_status 503;
}
}
```
**limit_conn_zone** key zone=name:size; 定義併發連線的配置
- 可定義的模組為http模組。
- key關鍵字是根據什麼變數來限制連線數,示例中有binary_remote_addr、$server_name,根據實際業務需求。
- zone定義配置名稱和最大共享記憶體,若佔用的記憶體超過最大共享記憶體,則伺服器返回錯誤
示例中的`$binary_remote_addr`是二進位制的使用者地址,用二進位制來節省位元組數,減少佔用共享記憶體的大小。
**limit_conn** zone number; 併發連線限制
- 可定義模組為http、server、location模組
- zone為指定使用哪個limit_conn_zone配置
- number為限制連線數,示例配置中限制為 1 個連線。
**limit_conn_log_level** info | notice | warn | error ; 限制發生時的日誌級別
- 可定義模組為http、server、location模組
**limit_conn_status** code; 限制發生時的返回錯誤碼,預設503
- 可定義模組為http、server、location模組
# 限制併發請求數
**limit_req_zone** key zone=name:size rate=rate; 定義限制併發請求的配置。
- 若佔用的記憶體超過最大共享記憶體,則伺服器返回錯誤響應
- rate定義的是請求速率,如10r/s 每秒傳遞10個請求,10r/m 每分鐘傳遞10個請求
**limit_req** zone=name [burst=number] [nodelay | delay=number];
- zone 定義使用哪個 limit_req_zone配置
- burst=number 設定桶可存放的請求數,就是請求的緩衝區大小
- nodelay burst桶的請求不再緩衝,直接傳遞,rate請求速率失效。
- delay=number 第一次接收請求時,可提前傳遞number個請求。
- 可定義模組為http、server、location模組
**limit_req_log_level** info | notice | warn | error; 限制發生時的日誌級別
- 可定義模組為http、server、location模組
**limit_req_status** *code*;限制發生時的錯誤碼
- 可定義模組為http、server、location模組
**示例配置1**
```nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5;
}
```
請求速率為每秒傳遞1個請求。burst桶大小可存放5個請求。超出限制的請求會返回錯誤。
**示例配置2**
```nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5 nodelay;
}
```
示例配置2是在示例配置1當中添加了`nodelay`選項。那麼rate請求速率則不管用了。會直接傳遞burst桶中的所有請求。超出限制的請求會返回錯誤。
**示例配置3**
```nginx
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5 delay=3;
}
```
示例配置3是在示例配置1當中添加了`delay=3`選項。表示前3個請求會立即傳遞,然後其他請求會按請求速率傳遞。超出限制的請求會返回錯誤。
> 個人部落格網址: https://colablog.cn/
如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您
![微信公眾號](http://qiniuyun.colablog.cn/%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg)