Nginx实例之限速

  限速该特性可以限制某个用户在一个给定的时间段内能够产生的http请求数.

  nginx可以通过连接频率限制(limit_conn_zone) 请求频率限制(limit_req_zone)对客户端访问进行限制.

    连接频率限制和请求频率限制都可以实现Nginx的请求限制 , 但是他们的实现原理是不一样的 , 区别就在于连接和请求上 , http协议的连接与请求 , http协议是建立在tcp协议之上的,要完成一次http的请求,先要进行tcp的3次握手建立http的连接 , 然后才进行http的request和response(请求和响应) , 现在http1.1以上的版本已经可以实现一次建立http的连接进行多次的http的request和response(请求和响应) ,最后客户端和服务端不断的来发送FIN包和ACK包来保持HTTP的连接.

  连接限制

http {

    ...

   #对单个ip、单个会话同时存在的连接数的限制。这里定义一个存储区conn_zone,conn_zone的容量是1m,该存储区针对于变量$binary_remote_add生效,这里是针对单个IP生效。该模块只是一个定义,配置在http配置段,需要配合limit_conn指令使用才生效, limit_conn one 1表示该location段使用conn_zone定义的 limit_conn_zone ,对单个IP限制同时存在一个连接。

    limit_conn_zone $binary_remote_addr zone=conn_zone:1m;

    server {

            location / {

                    limit_conn conn_zone 1;

            limit_rate 300k; # 对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2

            }

}

  请求限制

http {

    ...
   #$binary_remote_addr表示的是客户端的地址,zone=req_zone:1m代表的是开辟了一个名为req_zone的1M的空间, 速率rate=1r/s代表的是每秒1个 , 所以这里定义的配置代表:对于同一ip的请求,
限制平均速率为1个请求/秒。     limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;     server {             ...             location / {                     root  /usr/share/nginx/html;                    index  index.html index.htm;                     #请求限制 : 对于符合名为req_zone的limit_req_zone 配置(对于同一ip的请求,限制平均速率为1个请求/秒) , 超过部分进行延迟处理,若超过3个请求/秒,丢弃超过部分。                     #limit_req zone=req_zone burst=3 nodelay;                     #请求限制 : 对于符合名为req_zone的limit_req_zone 配置 ,超过部分进行延迟处理,若超过3个请求/秒,所有请求都被过度延迟,直到名为req_zone的limit_req_zone 配置设置的
              1M存储区被占满,如果存储区耗尽,则删除最近最少使用的状态。即使在此之后无法创建新状态,请求也会因错误而终止。                     #limit_req zone=req_zone burst=3;
                    #请求限制 : 对于符合名为req_zone的limit_req_zone 配置(对于同一ip的请求,限制平均速率为1个请求/秒) 若超过1个请求/秒,所有请求都被过度延迟,直到名为req_zone的
limit_req_zone 配置设置的1M存储区被占满,如果存储区耗尽,则删除最近最少使用的状态。即使在此之后无法创建新状态,请求也会因错误而终止。                     #limit_req zone=req_zone;             }

 

posted @ 2020-03-06 15:26  鄙人取个名字好难  阅读(200)  评论(0编辑  收藏  举报