zoukankan      html  css  js  c++  java
  • nginx请求频率限制模块ngx_http_limit_req_module

    模块: ngx_http_limit_req_module

    作用: 限制客户端请求频率,防止恶意攻击

    配置示例:

    http {
        limit_req_zone $binary_remote_addr zone=req_perip:50m rate=10r/s;
    
        ...
    
        server {
    
            ...
    
            location /api/ {
                    limit_req zone=req_perip burst=50 nodelay;
                    limit_req_status 503;
            }
        }
    }

    说明: 示例中定义的区域名称为req_peripzone=req_perip,分配内存大小为50m(如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503同一个ip$binary_remote_addr平均处理的请求频率不能超过每秒10次rate=10r/s 如果超过每秒10次但超过的请求数量小于等于50burst=50时,会延迟请求。如果超过每秒10次的请求数超过50,则立即返回503limit_req_status 503给客户端

    涉及指令:

      limit_req_zone

      limit_req

      limit_req_status 

      limit_req_log_level 

    指令详解:

    limit_req_zone
    
    语法: limit_req_zone key zone=name:size rate=rate; (可理解为该指令用来定义限制请求频率) 
    可配置区域: http 

    key: 必选项;取值范围: 1,text(文本); 2,nginx变量;3,text和nginx变量的组合; 注: 1.7.6版本之前取值只能是nginx变量

    name: 必选项;自定义字符串

    size: 必选项;分配内存大小,用来保存键值的状态参数

    rate: 必选项;每秒可请求的频率(r/s), 或每分钟可请求的频率(r/m)

      

    limit_req 
    
    语法: limit_req zone=name [burst=number] [nodelay]; (可理解为使用定义的限制请求频率,一定是先定义后使用!也就是一定要有limit_req_zone指令的配置后才能使用该配置)
    可配置区域: http, server, location 

    name: 必选项;自定义字符串, 名字必须与limit_req_zone中zone=name这个名字一致

    number: 必选项;正整数数字, 平均每秒允许不超过limit_req_zone指令中rate规定的请求数,并且不会超过该值所指定数量的请求, 可延迟请求的数量

    nodelay: 可选配置, 表示请求频率超过rate规定值后又超过burst规定值后立即返回客户端503(可设置返回code)

      

    limit_req_status 
    
    语法: limit_req_status code;
    默认值: 503
    可配置区域: http, server, location
    
    表示超出limit_req配置的请求数量后返回给客户端的错误码

    使用该指令最低版本 1.3.15

      

    limit_req_log_level
    
    语法: limit_req_log_level info | notice | warn | error;
    默认值: limit_req_log_level error;
    可配置区域: http, server, location
    
    当服务器拒绝处理由于速率超过或延迟请求处理而拒绝处理请求时,设置所需的日志记录级别。
    
    最低版本: 0.8.18
    

      

    常见错误:

      nginx: [emerg] zero size shared memory zone "oneip"

       出现此错误都是因为在未指定limit_req_zone指定就使用了limit_req指令的原因(或者limit_req中的name值和limit_req_zone中定义的name值不一致) 

  • 相关阅读:
    get started with laravel
    redis消息队列
    javascript模板引擎Mustache
    YIi 权限管理和基于角色的访问控制
    Yii CDbCriteria
    C++ 推断进程是否存在
    IE浏览器开启对JavaScript脚本的支持
    最小公约数(欧几里得算法&&stein算法)
    Nyoj 43 24 Point game 【DFS】
    【蓝桥杯】PREV-5 错误票据
  • 原文地址:https://www.cnblogs.com/zhen-rh/p/7424942.html
Copyright © 2011-2022 走看看