Nginx官方版本限制IP的连接和限制并发两个模块:
- limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。
limit_conn_zone 用来限制同一时间连接数,即并发限制。
limit_req_zone
```nginx http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
…
server {
...
location /search/ {
limit_req zone=one burst=5;
}
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];<br />Default: —<br />Context: http, server, location
<a name="NsyvG"></a>
### limit_conn_zone
这个模块用来限制单个IP的请求数。并非所有的连接都被计数。只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。
```nginx
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
Syntax:**limit_conn**
zone`_number_
;<br />Default:—Context:
http,
server,
location`
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;
}
Syntax: limit_conn_dry_run on | off;
Default:
limit_conn_dry_run off;
Context: http, server, location