簡介
限制併發連線數的模組為:http_limit_conn_module,地址: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
這兩個模組都是預設編譯進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
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req zone=one burst=5;
}
請求速率為每秒傳遞1個請求。burst桶大小可存放5個請求。超出限制的請求會返回錯誤。
示例配置2
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
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/
如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您