原文 : https://blog.eood.cn/rate-limiting
总结:
nginx中的处理:
参考网页:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
vi /export/servers/nginx/conf/nginx.conf
limit_zone one $binary_remote_addr 20m;
limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;
limit_conn one 10;
limit_req zone=req_one burst=120;
来看下具体含义:
burst :
漏桶数burst为5,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的。
但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
limit_zone,是针对每个变量(这里指IP,即$binary_remote_addr)定义
一个存储session状态的容器。这个示例中定义了一个20m的容器,
按照32bytes/session,可以处理640000个session。
( 已经被弃用,请用limit_conn_zone替换)
limit_req_zone 与limit_zone类似。rate是请求频率. 每秒允许12个请求。
limit_conn one 10 : 表示一个IP能发起10个并发连接数limit_req: 与limit_req_zone对应。
2. java中,
使用Google Guava 提供了一个 RateLimiter 实现
final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second" void submitTasks(List<Runnable> tasks, Executor executor) { for (Runnable task : tasks) { rateLimiter.acquire(); // may wait executor.execute(task); } }
3. redis :
参考网页: http://redis.io/commands/INCR#pattern-rate-limiter
jedis中有incr和expire的api
扩展:
nginx白名单配置:
http://colobu.com/2015/10/26/nginx-limit-modules/
转载于:https://blog.51cto.com/754136/1719286