nginx對特定參數限流


接到一個需求, 需要對請求(GET)里面的某個參數  的特定的值, 進行限流; 因為不限流的話, 不知道什么時候這個id的請求飆一下, 服務端就被壓死了... 

就像這樣: /index.html?id=1234, 當 id == 1234的時候, 需要進行限流,  id != 1234不管

服務端最前面用的 nginx

這里, 大神搬出的方案應該是 nginx+lua ; 網上很多介紹, 首推  開濤的公眾號


但是, 但是 個人理解

lua:

    優點: 可以應對更加復雜的需求, 例如智能地, 無論id是多少, 只要出現突發流量, 例如突增 5倍, 10倍, 自動 block掉; 更加智能方便, 一步到位; 

    缺點: 開發成本, 部署成本

nginx自帶模塊

    優點: 部署成本低, 改改配置就好

    缺點: 很笨, 被打了一次才知道防...


因為小弟比較菜, 馬上做個 nginx+lua 是辦不到了,  只能先用自帶模塊干咯


具體做法

用 map 模塊來匹配參數, 形成一個key,  再用  limit_req 做限流

    http {  
        limit_req_zone $self_defined_id zone=testing:10m rate=2r/s;  
        limit_req_log_level info;  
        limit_req_status 503;  
      
    ## $arg_id表示get請求里面, id這個變量  
    map $arg_id $self_defined_id {  
        1234 1234;  
    } 
  server {
    server_name test.com default;
    listen  80;

 ## 這里被限流了就直接 503了
 limit_req zone=testing;
## 定義個 503的話就怎樣做
error_page 503 /wait.html

    location /limit.html {
        #  limit_req zone=testing;
    }

    location /un.html {
    }
}

}
  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM