• 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;             }
  • 相关阅读:
    less css用法思维导图
    javascript模块化编程规范
    行高:line-height图文解析
    CSS细节
    Emmet
    常见的浏览器兼容问题
    一条在没有水的环境下坚持了四年生存下来的鱼
    纪念:一高那些年
    水墨青花
    float浮动
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12423932.html
Copyright © 2020-2023  润新知