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 {

    1. ...
    2. location /search/ {
    3. limit_req zone=one burst=5;
    4. }
  1. Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];<br />Default: —<br />Context: http, server, location
  2. <a name="NsyvG"></a>
  3. ### limit_conn_zone
  4. 这个模块用来限制单个IP的请求数。并非所有的连接都被计数。只有在服务器处理了请求并且已经读取了整个请求头时,连接才被计数。
  5. ```nginx
  6. http {
  7. limit_conn_zone $binary_remote_addr zone=addr:10m;
  8. ...
  9. server {
  10. ...
  11. location /download/ {
  12. limit_conn addr 1;
  13. }

Syntax:**limit_conn**zone`_number_;<br />Default:—Context:http,server,location`

  1. limit_conn_zone $binary_remote_addr zone=perip:10m;
  2. limit_conn_zone $server_name zone=perserver:10m;
  3. server {
  4. ...
  5. limit_conn perip 10;
  6. limit_conn perserver 100;
  7. }

Syntax: limit_conn_dry_run on | off;
Default:
limit_conn_dry_run off;
Context: http, server, location