最近公司有個限流的需求,因為,目前尚未達到一定體量,所以,決定暫且采取Nginx限流的方案。詳情如下:
找到nginx的配置,在http模塊下新增:
limit_req_zone $binary_remote_addr zone=checkCode:10m rate=20r/m;
rate=20r/m 表示三秒鍾訪問一次,如果是每秒鍾的限制 就改成1r/s
在server模塊下,新增:
location = /api/redeemCode/checkCode {
limit_req zone=checkCode burst=5 nodelay;
proxy_pass http://127.0.0.1:8113/api/redeemCode/checkCode;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
#限制每ip每秒不超過20個請求,漏桶數burst為5
#brust的意思就是,如果第1秒、2,3,4秒請求為19個,
#第5秒的請求為25個是被允許的。
#但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤。
#nodelay,如果不設置該選項,嚴格使用平均速率限制請求數,第1秒25個請求時,5個請求放到第2秒執行,
#設置nodelay,25個請求將在第1秒執行。
注意:zone的值http里面的zone和server里面的zone名稱要保持一致!