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 @   wshenJin  阅读(414)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示