1. 程式人生 > 其它 >深入Nginx二:通過Nginx限制連線併發

深入Nginx二:通過Nginx限制連線併發

技術標籤:Nginxnginx

文章目錄

一、背景

  • 在網際網路應用中,大規模的連線及請求會給伺服器巨大的壓力,這時候我們需要考慮對同一個IP的連線數及併發數進行限制。
  • 在Nginx的preaccess階段通過http_limit_conn_module 模組限制每個IP連線數,並通過http_limit_req_module 模組限制請求併發處理的頻率。

二、限制連線數

  • 限制連線數通過limit_conn 指令進行定義,針對全部worker程序的(工作程序通過共享記憶體中的關鍵鍵值的定義進行限制),並依賴於Nginx取得的真實的IP。
  1. 首先定義共享記憶體大小及關鍵鍵值
    – 格式: limit_conn_zone key zone=name:size
  2. 其次根據定義配置限制併發連線數
    – 格式: limit_conn zone number
  3. 再次記錄日誌及向客戶端返回錯誤碼
    – 格式: limit_conn_log_level error|info|warn|notice;limit_conn_status code
  • 例項:
http{
 ...
 # 限制連線共享記憶體
 limit_conn_zone $binary_remote_addr zone=limit_addr:10m;
 
 server {
        listen       80 default_server;
        listen       [
::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { limit_conn_status 500; limit_conn_log_level warn; # 限制返回速度
limit_rate 50; # 限制併發連線為1; limit_conn limit_addr 1; } error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
  • 測試:
  1. 在客戶端上發起正常請求
    在這裡插入圖片描述
  2. 在同一客戶端上再次發起請求
    在這裡插入圖片描述