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;
        }
    }


}

複製代碼
相關文章
相關標籤/搜索