nginx 限制频繁访问的 remote_user,而不限制 IP

2018 年 12 月 7 日
 MaxFang

一般对于请求频繁的处理方式,我们会通过限制每分钟 IP 访问次数等方式去限制。 内部系统客户端可能会是一个 IP 下面多个用户账号,在某个用户请求频繁的时候,仅限制该用户 $remote_user 的请求,而不限制或禁用整个 IP。

某个用户的键盘回车有问题,导致短时间进行了上万次请求(泪奔,被内部 DDOS 了)

对于这种情况,各位大佬有木有神马好的方法。

目前暂时是通过限制 IP 访问频率的方式限制的(这种会导致误 ban),没啥好的方法的话,准备脚本统计频繁访问的 $remote_user,记入 blacklist,系统中临时禁止 blacklist 中的用户请求,如手动返回 503。

6352 次点击
所在节点    NGINX
15 条回复
Phant0m
2018 年 12 月 7 日
nginx 没有$remote_user 这个变量吧?
hlwjia
2018 年 12 月 7 日
这个 remote_user 是你自己编的吧

能追踪到具体哪个用户的,只有你自己的 application 了吧。
Phant0m
2018 年 12 月 7 日
不好意思哈刚才查了一下 确实有。
使用 nginx_lua 申请一个内存内存字典作为计数器可以实现你想要的功能
hlwjia
2018 年 12 月 7 日
再退一步讲,码农们,不要老是代码解决问题啊。

你这还是内部系统,直接把那人的键盘扔了就好了。
Phant0m
2018 年 12 月 7 日
@hlwjia 启用并经过 Auth Basic Module 验证的用户 是有$remote_user 这个变量的
hlwjia
2018 年 12 月 7 日
@Phant0m 哈哈哈 看来 nginx 我也不是很熟
Lax
2018 年 12 月 7 日
默认日志格式开头就有这个变量。
可是这个问题里,联系回车不应该等同于连续提交啊,前端的锅。
opengps
2018 年 12 月 7 日
cookie 里做识别吧
wadahana
2018 年 12 月 7 日
waf 了解下。
MaxFang
2018 年 12 月 7 日
@Phant0m 恩恩,使用了 basic access authentication,日志里面是可以跟踪到的
MaxFang
2018 年 12 月 7 日
@Lax 哈哈,这个可以有。 当然也想了解一下这种情况下有没有其他的方式来限制。
MaxFang
2018 年 12 月 7 日
@wadahana 有同学也提到了,周末了解一下。
MaxFang
2018 年 12 月 7 日
@opengps 通过代码段来控制嘛,目前的一种准备的做法是这个,只是感觉这种做法不优雅。哈哈
ichou
2018 年 12 月 7 日
回车卡住触发上万次请求? 不是应该让前端给按钮写一个 disable-with 么?
greenskinmonster
2018 年 12 月 8 日
limit req 可以用 session cookie 做 key,这样就是基于用户的限制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/515481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX