使用Nginx限制同一IP的访问频率

http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

配置方法

修改nginx的配置文件, 在http{}下增加

# 创建一个10MB大小的请求记录zone, 限制同一IP的访问每分钟60次
limit_req_zone $binary_remote_addr zone=req_perip:10m rate=60r/m;
# 创建一个10MB大小的连接数记录zone, 记录同一IP的同时连接数
limit_conn_zone $binary_remote_addr zone=con_perip:10m;

在server{} 或 location{} 下增加

# 对指定的zone, 设置突发余量限制为256, 不延迟直接返回503, 否则会让请求等待
limit_req zone=req_perip burst=256 nodelay;
# 对指定的zone, 限制同时连接数不超过16
limit_conn conperip 16;

注: 对于设定了连接数限制的, 检查 worker_processes 的值, 如果这里设置的数值还不到连接数的限制, 连接数限制永远不会被触发.

Update 2017-03-13:

在生产环境上测试的结果:
limit_req_zone的rate设置为256r/m, burst设置为512可以满足绝大部分情况 -- 这个一定程度上取决于页面上元素的多少
limit_conn 设置为16可以满足绝大部分情况

posted on 2017-02-27 22:11  Milton  阅读(2095)  评论(0编辑  收藏  举报

导航