服务器问答

Nginx 如何限制相同 request_body 的访问频率
0
2021-05-19 20:04:29
idczone
limit_req_zone $request_body zone=myzone:10m rate=2r/s;

server {
    location /push {
美国服务器        limit_except POST {
            deny  all;
        }
        limit_req zone=myzone burst=2 nodelay;
        ...
    }
}

如上, 我希望能限制相同 request_body 的访问频率, 好像不起作用?


你计算一下 request_body 的 hash 放到 header 中, 然后根据 header 去重就可以了


想当然了,了解一下 Nginx 的处理阶段

对哦, 先处理 header 再处理 bady, 搞反了

要不前端做这个 hash ?

换个方式,通过 redis 来,md5 每次请求添加到 redis 中,设置一个过期时间,下个请求先判断 redis 中是否存在, 频率通过过期时间来控制

openresty 处理下

为了一个辅助性功能的话, 学习成本太大了

一天而已

我试了一下多做一层代理, 第一层把 request_body 添加到 header, 由第二层做去重, 但好像不太成功, 不知道 header 是怎么设置的? 能否指点一下 ^^
limit_req_zone $http_HEADER zone=myzone:10m rate=1r/s;
location /a {
proxy_pass http://127.0.0.1/b;
add_header data $request_body;
}
location /b {
proxy_pass http://127.0.0.1/real-addr;
limit_req zone=myzone burst=2 nodelay;
}

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服