linghaiyan 发表于 2017-12-23 16:23:56

nginx对特定参数限流

  接到一个需求, 需要对请求(GET)里面的某个参数的特定的值, 进行限流; 因为不限流的话, 不知道什么时候这个id的请求飙一下, 服务端就被压死了...

  就像这样: /index.html?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请求里面,>  map $arg_id $self_defined_id {
1234 1234;  }
  server {
  server_name test.com default;
  listen80;
  ## 这里被限流了就直接 503了
  limit_req zone=testing;
  ## 定义个 503的话就怎样做
  error_page 503 /wait.html
  location /limit.html {
  #limit_req zone=testing;
  }
  location /un.html {
  }
  }
  }
  
页: [1]
查看完整版本: nginx对特定参数限流