Nginx 有办法对特定 ua 的请求进行速度限制吗

查看 102|回复 5
作者:wu67   
RT.
在服务器上建了 webdav 服务, 然后本地用 infuse 播放视频.
但是这播放器的缓存策略好像有点问题, 会一直不停的全速缓存整个视频,
我知道可以limit_rate ***k对 location 限速, 但是这是所有请求都限速了(有时候会想直接把文件全速下载回本地保存)
就想问问有没有办法能针对特定 ua 进行 limit_rate ?

limit_rate, 限速, 全速, 请求

nashaofu   
两个功能都有的吧,组合下就可以用,if $http_user_agent ~* "ua" {}
wu67
OP
  
@nashaofu 好像不行啊。按语法思路,声明语句不能放在条件语句 if 里面
jinzc   
换用 openresty , 编码识别 ua 后限制速率
dropdatabase   
```
location / {
access_by_lua_block {
local limit_dict = ngx.shared.my_limit_dict
local ua = ngx.var.http_user_agent
local limit_key = "ua:" .. ngx.md5(ua)
local limit_count = limit_dict:get(limit_key) or 0
-- 设置速度限制,例如每秒最多 5 个请求
local limit_rate = 5
if limit_count > limit_rate then
ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS)
else
limit_dict:incr(limit_key, 1)
end
}
# 其他处理逻辑...
}
```
kaf   
http {
# 定义一个 map 块来匹配需要限速的 User-Agent
map $http_user_agent $limited_ua {
default 0; # 默认情况下不进行限速
~*bot 10; # 匹配包含 'bot' 的 User-Agent 并限制为 10 req/s
~*spider 5; # 匹配包含 'spider' 的 User-Agent 并限制为 5 req/s
}
# 在 server 或 location 块中使用 limit_req_zone 指令来定义限速的区域
limit_req_zone $limited_ua zone=ua_limit:10m rate=$limited_ua;
server {
...
location / {
# 在需要限速的 location 块中使用 limit_req 指令来实现限速
limit_req zone=ua_limit burst=5 nodelay;

# 其他配置项
...
}
}
}
您需要登录后才可以回帖 登录 | 立即注册

返回顶部