简单的Nginx防CC方式
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { #限制每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秒执行。 limit_req zone=one burst=1 nodelay; }}
上面样本的配置是什么意思呢?
$binary_remote_addr 表示:客户端IP地址
zone 表示漏桶的名字
rate 表示nginx处理请求的速度有多快
burst 表示峰值
nodelay 表示是否延迟处理请求,还是直接503返回给客户端,如果超出rate设置的情况下。
详细的可以参考官方说明文档:Module ngx_http_limit_req_module(http://nginx.org/en/docs/http/ngx_http_limit_req_module.html)
这里我们需要Apache Benchmark这个小工具来生成请求
//1个用户持续100s的时间向服务器发送请求ab -t 100 -c 1 -vvv http://example.com/
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { limit_req zone=one burst=1 nodelay; }}
ab测试结果如下所示: