Nginx-请求限制

如今的 http 协议支持在一次链接上创建屡次请求,因而就有了请求限制和链接限制
http1.1 支持顺序性 tcp 复用,到了2.0支持多路tcp复用。
html

limit_conn_module,链接频率限制

配置语法:node

Syntax: limit_conn_zone key zone=name:size;

Default: -

Context: http
复制代码
Syntax: limit_conn name number;

Default: -

Context: http,server,location
复制代码

示例:bash

http {
    ...
    
    limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
    
    // conn_zone 是自定义的变量
    // $binary_remtoe_addr 表示客户端地址,放在这里表示经过客户端地址限制请求次数。$binary_remote_addr$remote_addr 节省空间。
    
    
    
    server {
        ...
        
        limit_conn conn_zone 1;
        // 限制同一个 IP 同时只能有一个链接。
        // 同时只能有一个链接的意思不是同时只能有一个请求,一个链接能够有多个请求
        
        location / {
            root   html;
            index  index.html index.htm;
        }
    }


}
复制代码

limit_req_module,请求频率限制

配置语法:tcp

Syntax: limit_req_zone key zone=name:size rate=rate;

Default: -

Context:http
复制代码
Syntax: limit_req zone=name [burst=number][nodelay];

Default: -

Context: http,server,location
复制代码

示例:spa

http {
    ...
    
    limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
    // 表示对同一个 IP 限制每秒请求一次。
    
    // $binary_remtoe_addr 表示客户端地址,放在这里表示经过客户端地址限制请求次数。$binary_remote_addr$remote_addr 节省空间。
    // 1m 表示 zone 的大小
    // zone=req_zone 表示 zone 的名字
    // rate=1r/s 表示每秒一次请求
    
    server {
        ...
        
        limit_req zone=req_zone;
        // 在这个 server 下的全部 location 使用 req_one 的限制,每秒只能请求一次。
        
        limit_req zone=req_zone burst=3 nodelay;
        // burst=3 表示达到限制以后有3个会到下一秒执行,对客户端访问限速
        // nodelay 是不等待直接返回 503 等
        
        location / {
            root   html;
            index  index.html index.htm;
        }
    }


}

复制代码
相关文章
相关标签/搜索