一、全侷限流
在http節點中新增
# 建立限流規則
limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;# 客戶端進行限流
# limit_req_zone $server_name zone=addr:10m rate=1r/s; # 服務端進行限流
server {
# 監聽埠預設是80
listen 80;
# 伺服器ip或域名
server_name 192.168.140.130;
location / {
limit_req zone=addr burst=1 nodelay;
proxy_pass http://xiaohemiao;
}
}
upstream xiaohemiao {
server 192.168.140.130:7777; # 應用埠7777
server 192.168.140.130:8888; # 應用埠8888
}
- $binary_remote_addr 針對客戶端ip限流;
- $server_name 針對服務端進行限流
- zone=ip_limit:10m 限流規則名稱為ip_limit,允許使用10MB的記憶體空間來記錄ip對應的限流狀態;
- rate=1r/s 限流速度為每秒1次請求
- burst為允許快取的速率數量進行排隊
- nodelay為不需要等待排隊
二、自定義限流
比如只對登入進行限流,假設登入介面名為login
location = /login {
limit_req zone=addr burst=1 nodelay;
proxy_pass http://xiaohemiao;
}
在配置中需要注意的一點是location匹配規則和優先順序
= 開頭表示精確匹配
^~ 開頭表示url以某個常規字串開頭,不是正則匹配
~ 表示區分大小寫的匹配
~* 開頭表示不區分大小寫的正則匹配
/ 通配匹配,如果沒有其他匹配,任何請求都會匹配到