nginx如何限制併發連線請求數?

Johnson木木發表於2020-09-04

簡介

限制併發連線數的模組為: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/

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

相關文章