1. 程式人生 > >nginx如何限制併發連線請求數?

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

# 簡介 限制併發連線數的模組為:**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)