nginx如何限制並發連接請求數?


簡介

限制並發連接數的模塊為: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/

如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您
微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM