Nginx提供了两种限流手段:一是控制速率,二是控制并发连接数。
1.控制速率
使用limit_req_zone来限制单位时间内的请求数,即速率限制,示例配置如下:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server {
location / {
limit_req zone=mylimit;
}
}
以上配置表示,限制每个IP访问的速度为2r/s,因为Nginx的限流统计是基于毫秒的,我们设置的速度是2r/s,转换一下就是500ms内单个IP只允许通过1个请求,从501ms开始才允许通过第2个请求。
速率限制允许突发burst:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server {
location / {
limit_req zone=mylimit burst=4;
}
}
burst=4表示每个IP最多允许4个突发请求。
2.控制并发连接数
利用limit_conn_zone和limit_conn两个指令即可控制并发数,示例配置如下:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10;
limit_conn perserver 100;
}
其中limit_conn perip 10表示限制单个IP同时最多能持有10个连接;limit_conn perserver 100表示server同时能处理并发连接的总数为100个。
PS:只有当request header被后端处理后,这个连接才进行计数。