# 根據IP地址進行限流 # 1) 第一個參數 $binary_remote_addr # binary_目的是縮小內存佔用,remote_addr表示經過ip地址來限流 # 2) 第二個參數 zone=iplimit:20m # iplimit是一塊內存區域(記錄訪問頻率信息),20m表示這塊內存區域的大小 # 3) 第三個參數 rate=1r/s # 好比rate=100r/m,表示訪問的限流頻率 limit_req_zone $binary_remote_addr zone=iplimit:20m rate=10r/s; # 根據服務器級別進行限流 limit_req_zone $server_name zone=severlimit:10m rate=100r/s; # 基於鏈接數的配置 limit_conn_zone $binary_remote_addr zone=perip:20m; limit_conn_zone $server_name zone=perserver:20m; server { server_name www.nginx-limit.com; location /access-limit/ { proxy_pass http://172.16.50.2:8888/; # 基於IP地址的限制 # 1) 第一個參數 zone=iplimit -> 引用limit_req_zone中的zone變量 # 2) 第二個參數 burst=2 -> 設置一個大小爲2的緩衝區域,等大量請求到來 # 請求數量超過限流頻率時,將其放入緩衝區域 # 3) 第三個參數 nodelay->緩衝區域滿了之後返回503錯誤 limit_req zone=iplimit burst=2 nodelay; # 基於服務器級別的限制 # 一般狀況下,server級別的限制速率是最大的 limit_req zone=serverlimit burst=100 nodelay; # 每一個server最多保持100個鏈接 limit_conn perserver 100; # 每一個ip最多保持1個鏈接 limit_conn perip 1; #異常狀況返回504(默認返回503) limit_req_status 504; limit_conn_status 504; }
# 限制下載速度 location /download/ { # 下載完100m後開始限制 limit_rate_after 100m; # 限制下載的速度 limit_rate 256k; }