Nginx根据请求参数限流

个人学习笔记,谢绝转载!!!

原文:https://www.cnblogs.com/wshenjin/p/16563211.html


根据业务方的需求,针对/user/login/api.php路径下,userid=(1234567890|1234567891|1234567892)的接口做特定IP或网段的请求限制。

##黑名单列表
geo $remote_addr $limit_tag {
    192.168.0.0/16 1;
    10.250.11.92   1;
    default 0;
}

map $limit_tag $limit_addr {
    1 $remote_addr;
    0 0;
}

map $limit_addr$request_uri $limit_req {
    ~^[1-9].*/user/login/api.php?.*\buserid=(1234567890|1234567891|1234567892)\b.* $binary_remote_addr;
    default "";
}

limit_req_zone $limit_req zone=userid_limit_zone:10m rate=100r/m;

server {
    listen       80;
    server_name  limit.example.com;
    index index.html index.htm index.php;
    root /data/web/api/;

    location ~ /user/login/ {
         limit_req_status 406;
         limit_req zone=userid_limit_zone burst=30 nodelay;
         error_page 406 = /limitPage.deny;
    }

    ##限制页面, 为了单独打印被限制请求的日志
    location =/limitPage.deny {
        return 200 '{"code": 200}';
        access_log /data/logs/$host.limit.log access2;
    }
    access_log /data/logs/$host.log access;
}
posted @ 2022-08-08 19:50  wshenJin  阅读(407)  评论(0编辑  收藏  举报