详解Nginx http资源请求限制(三种方法)

  

让我来详细讲解一下“详解Nginx http资源请求限制(三种方法)”的完整攻略。

标题

介绍

文章介绍了如何使用Nginx限制 http 资源请求的三种方法,这些方法包括:

  1. 通过"http limit req module"限制请求次数
  2. 通过"rate-limiting module"限制请求速度
  3. 通过"http referer module"限制请求来源

本文将对这三种方法分别进行详述,并提供示例说明。

http limit req module

这种方法通过使用http limit req module来限制请求次数。首先需要在nginx.conf文件里添加如下内容:

http {
    limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=1r/s;

    server {
        location / {
            limit_req zone=limit_zone burst=5 nodelay;
        }
    }
}

语法说明:

  • limit_req_zone定义一个共享内存区域,存储限制信息。其中$binary_remote_addr是限制的key,用于标识唯一的客户端。zone=limit_zone定义了内存区域的名字和大小,本例中大小为10M。
  • rate指定限速速率,1r/s表示每秒限制一个请求.
  • 在server段中的location指令中添加limit_req指令和对应的zone=limit_zone定义的共享内存区域名称. burst=5表示为第六个请求时开始启动限制,默认为0,可以自行调整。nodelay表示当并发请求达到限制时,不会延迟请求处理。

rate-limiting module

这种方法通过使用rate-limiting module来限制请求速度。首先需要在nginx.conf文件里添加如下内容:

http {
    limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=1r/s;

    server {
        location / {
            limit_rate 100k;
        }
    }
}

语法说明:

  • limit_rate 指定请求处理速度,单位是字节每秒,默认为0,表示不限制速度。这里设置为100k,表示每秒处理100KB数据。
  • 如果 limit_req_zone 没有配置,可以直接使用limit_rate。

http referer module

这种方法通过使用http referer module来限制请求来源。首先需要在nginx.conf文件里添加如下内容:

http {
    server {
        location / {
            valid_referers none blocked server_names;
            if ($invalid_referer) {
                return   403;
            }
        }
    }
}

语法说明:

  • valid_referers 指定合法的referer,包括none、blocked或者server_names等。
  • 如果valid_referers中包含server_names,则必须在http.conf中定义server_names。例如:
http {
    server_names_hash_bucket_size 64;
}

示例:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name example.com;
        server_tokens off;

        access_log /var/log/nginx/default.access.log;
        error_log /var/log/nginx/default.error.log;

        # 请求限制
        limit_req zone=first limit=10 burst=5;
        limit_conn_zone $binary_remote_addr zone=second:10m;
        limit_conn second 3;

        location / {
                try_files $uri $uri/ =404;
        }
}

这里示例中采用了"http limit req module"的方法限制了每个IP最多只能访问10次,并且如果超过10次的流量,则把超过的流量限制在5个请求内。同时还开启了limit_conn,用于限制并发连接数量。

在下面的对话成果中,我们提供了文章中所提到的三种方法的详细说明和示例,如果还有其他问题或疑问,欢迎随时询问。

相关文章