V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
MaxFang
V2EX  ›  NGINX

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

  •  
  •   MaxFang · 2018-12-07 19:57:22 +08:00 · 5088 次点击
    这是一个创建于 2160 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    15 条回复    2018-12-08 00:07:29 +08:00
    Phant0m
        1
    Phant0m  
       2018-12-07 20:11:02 +08:00 via iPhone
    nginx 没有$remote_user 这个变量吧?
    hlwjia
        2
    hlwjia  
       2018-12-07 20:13:27 +08:00
    这个 remote_user 是你自己编的吧

    能追踪到具体哪个用户的,只有你自己的 application 了吧。
    Phant0m
        3
    Phant0m  
       2018-12-07 20:14:30 +08:00 via iPhone
    不好意思哈刚才查了一下 确实有。
    使用 nginx_lua 申请一个内存内存字典作为计数器可以实现你想要的功能
    hlwjia
        4
    hlwjia  
       2018-12-07 20:15:30 +08:00
    再退一步讲,码农们,不要老是代码解决问题啊。

    你这还是内部系统,直接把那人的键盘扔了就好了。
    Phant0m
        5
    Phant0m  
       2018-12-07 20:16:12 +08:00 via iPhone
    @hlwjia 启用并经过 Auth Basic Module 验证的用户 是有$remote_user 这个变量的
    hlwjia
        6
    hlwjia  
       2018-12-07 20:16:39 +08:00
    @Phant0m 哈哈哈 看来 nginx 我也不是很熟
    Lax
        7
    Lax  
       2018-12-07 20:40:24 +08:00
    默认日志格式开头就有这个变量。
    可是这个问题里,联系回车不应该等同于连续提交啊,前端的锅。
    opengps
        8
    opengps  
       2018-12-07 20:45:44 +08:00
    cookie 里做识别吧
    wadahana
        9
    wadahana  
       2018-12-07 20:58:15 +08:00
    waf 了解下。
    MaxFang
        10
    MaxFang  
    OP
       2018-12-07 21:01:01 +08:00
    @Phant0m 恩恩,使用了 basic access authentication,日志里面是可以跟踪到的
    MaxFang
        11
    MaxFang  
    OP
       2018-12-07 21:11:59 +08:00
    @Lax 哈哈,这个可以有。 当然也想了解一下这种情况下有没有其他的方式来限制。
    MaxFang
        12
    MaxFang  
    OP
       2018-12-07 21:12:57 +08:00
    @wadahana 有同学也提到了,周末了解一下。
    MaxFang
        13
    MaxFang  
    OP
       2018-12-07 21:17:27 +08:00
    @opengps 通过代码段来控制嘛,目前的一种准备的做法是这个,只是感觉这种做法不优雅。哈哈
    ichou
        14
    ichou  
       2018-12-07 22:09:51 +08:00
    回车卡住触发上万次请求? 不是应该让前端给按钮写一个 disable-with 么?
    greenskinmonster
        15
    greenskinmonster  
       2018-12-08 00:07:29 +08:00 via Android
    limit req 可以用 session cookie 做 key,这样就是基于用户的限制
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.